Eine Vorlage ist keine Klasse. Es ist eine Vorlage. (Ein Bauplan, um eine Klasse zu bauen). Es kann nur eine Klasse werden, wenn alle Template-Parameter berücksichtigt werden.
dies geschrieben zu haben (Tippfehler korrigiert):
template <typename T, int N>
class MyClass {
};
Sie können mit allen Mitteln dies zu tun:
template<int N> class MyClass<int, N>;
template<int N> class MyClass<float, N>;
Aber es ist nicht eine Vorlage Instanziierung (denn das hat keine Bedeutung), noch Ist es eine konkrete Klasse, die aus dieser Vorlage gebildet wird? Was es tatsächlich tut, ist das Vorwärtsdeklarieren der Existenz einer teilweise spezialisierten (möglicherweise unendlichen) Teilmenge des Templates.
Sie können auch dies tun:
template<int N> class MyClass<int, N> {};
template<int N> class MyClass<float, N> {};
Welche MyClass
für <int, [all values of N]>
und <float, [all values of N]>
teilweise spezialisiert hat.
Diese Vorlagenuntergruppe wird jedoch immer noch nicht instanziiert. Lediglich definiert.
tatsächlich eine Vorlage zu instanziieren, ob teilweise spezialisiert oder nicht, müssen wir es benennen, unter Berücksichtigung aller Vorlage Argumente.