2

Können wir eine C++ Vorlage explizit partitionieren?C++ Vorlage partielle explizite Instanziierung

template class <typename T, int N> 
class MyClass { 
    ... 
}; 

template<int N> class MyClass<int, N>; // not meant for specification 
template<int N> class MyClass<float, N>; 

wie wir haben können:

template class <typename T> 
class MyClass { 
    ... 
}; 

template class MyClass<int>; 
template class MyClass<float>; 

Antwort

5

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.

Verwandte Themen