Seite 1 von 1

Template mehrfach definiert

Verfasst: 17.11.2012, 18:10
von Jonathan
Hi, ich habe mal wieder ein Problemchen mit Templates. Meine Klasse sieht folgendermaßen aus:

Code: Alles auswählen

#pragma once

#include <string>
#include <fstream>

class OArchive
{
public:
	template<typename t> friend OArchive& operator<< (OArchive& Archive, t val);
	OArchive(std::string Filename, bool Tags=true);
private:
	std::ofstream m_File;
	bool m_Tags;//whether to write redundancy tags or not
};

template<typename t> OArchive& operator<< (OArchive& Archive, t val)
{
}


template<> OArchive& operator<< <unsigned int>(OArchive& Archive, unsigned int value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <int>(OArchive& Archive, int value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <float>(OArchive& Archive, float value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <bool>(OArchive& Archive, bool value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}
Sobald ich den Header an mehr als 2 Stellen inkludiere, bekomme ich die Fehlermeldung, dass die Operatoren bereits definiert sind. Gut, bei normalen Funktionen wäre das ja klar, aber bei Templates sollte doch genau das nicht passieren? Was könnte da schief laufen?

Re: Template mehrfach definiert

Verfasst: 17.11.2012, 18:12
von Krishty
Template-Spezialisierungen sind im Sinne des Linkens afaik normale Funktionen, da sie nicht abhängig von Typparametern sind. Du wirst die Spezialisierungen inline definieren müssen.

Re: Template mehrfach definiert

Verfasst: 17.11.2012, 23:06
von Jonathan
Jo, danke.

Hab übrigens auch das hier noch gelesen und bin gleich zu überladenen Funktionen gewechselt:

http://www.gotw.ca/publications/mill17.htm

Aber mit dem inline gings auch, vermutlich hätte es auch im Header deklarieren und in einer cpp einmal definieren getan.