Ich habe die folgenden Klassen:Wie kann ich spezialisieren/eine Template-Funktion für einen Templat-Typ überlasten
template <>
container<int>::container() {
std::cout << "int constructor" << std::endl;
}
:
template <class... T>
class thing {};
template <class T>
class container {
public:
container() {
std::cout << "normal constructor" << std::endl;
}
};
ich eine volle Spezialisierung für den Konstruktor von container<int>
auf diese Weise schreiben kann
Ich möchte in der Lage sein, einen ähnlichen Konstruktor für container<thing<T>>
zu definieren. Ich denke, was ich bin versucht, eine partielle Spezialisierung einer Template-Funktion zu schreiben, ist hier, was ich bin versucht (was illegal ist.):
template <class T>
container<thing<T>>::container() {
}
Diese nicht kompiliert.
Ich bin nicht ganz sicher, was der richtige Weg zur Lösung dieses Problems ist und die Grenzen zwischen dem, was eine Überladung und eine Spezialisierung für eine Vorlage-Klasse-Funktion sind verschwimmen. Kann das trivial gelöst werden oder wird type_traits (std::enable_if
) benötigt? Wie kann ich das lösen?
sehr elegante Lösung (IMHO) – max66
@ max66 zu definieren. Die teilweise Spezialisierung der gesamten Klasse kann schnell zu Code-Duplikation führen. Normalerweise versuche ich, sie möglichst zu vermeiden. – skypjack
@ max66 Nur bei mehreren _specialized_ Konstruktoren mehr Details hinzugefügt. Ich hoffe es gefällt dir auch. ;-) – skypjack