Angenommen, ich habe erklärt:
template <typename T> void foo(T& t);
Was ist nun der Unterschied zwischen
template <> void foo<int>(int& t);
und
template void foo<int>(int& t);
semantisch? Und haben Vorlagen ohne Klammern und Vorlagen mit leeren Klammern in anderen Kontexten eine andere Semantik?
Verwandte Themen: Wie erzwinge ich die Instanziierung einer bestimmten Instanz einer C ++ - Vorlage?
c++
templates
template-specialization
einpoklum
quelle
quelle
foo<int>
wird einen anderen Körper haben alsfoo<T>
"; Wenn Code an anderer Stelle im Programmfoo<int>()
aufgerufen wird, Sie den Text jedoch nicht angeben, sollte ein Alink-Fehler angezeigt werden.foo<int>
(der diefoo<T>
Vorlage zum Generieren verwendet, es sei denn, Sie hatten auch die Spezialisierungszeile!) tatsächlich verarbeitet wird (ähnlich wie beim Definieren einer Nicht-Vorlagenfunktion). Normalerweise müssen Sie dies nicht tun, da es passiert, wenn ein anderer Code aufruftfoo<int>
, aber Sie möchten es vielleicht aus ein paar GründenMit Klasse / Struktur,
template <typename T> struct foo {};
Es folgt eine Spezialisierung:
template <> struct foo<int>{};
Es folgt eine explizite Instanziierung:
template struct foo<int>;
quelle