Ich weiß, dass es möglich ist, eine Vorlagenfunktion zu erstellen:
template<typename T>
void DoSomeThing(T x){}
und es ist möglich, eine Vorlagenklasse zu erstellen:
template<typename T>
class Object
{
public:
int x;
};
Aber ist es möglich, eine Klasse nicht innerhalb einer Vorlage zu machen und dann eine Funktion in dieser Klasse zu einer Vorlage zu machen? Dh:
//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
template<class T>
void DoX(){}
};
oder etwas in dem Maße, in dem die Klasse nicht Teil einer Vorlage ist, sondern die Funktion?
Siehe hier: Vorlagen , Vorlagenmethoden , Elementvorlagen, Elementfunktionsvorlagen
quelle
Ja, Vorlagenelementfunktionen sind bei zahlreichen Gelegenheiten vollkommen legal und nützlich.
Die einzige Einschränkung besteht darin, dass Vorlagenelementfunktionen nicht virtuell sein können.
quelle
Der einfachste Weg besteht darin, die Deklaration und Definition in derselben Datei abzulegen. Dies kann jedoch zu einer übergroßen auslösbaren Datei führen. Z.B
Es ist auch möglich, die Vorlagendefinition in die separaten Dateien einzufügen, dh sie in CPP- und H-Dateien abzulegen. Alles, was Sie tun müssen, ist, die Vorlageninstanziierung explizit in die CPP-Dateien aufzunehmen. Z.B
quelle