c++ - multiple - "Template<>" vs "template" ohne Klammern-was ist der Unterschied?




c++ template struct (2)

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 Template-with-no-Brackets und Template-with-Empty-Brackets in anderen Kontexten eine andere Semantik?

Verwandt mit: Wie erzwinge ich das Instanziieren einer bestimmten Instanz einer C ++ - Vorlage?


Mit class / struct,

template <typename T> struct foo {};

Es folgt eine Spezialisierung:

template <> struct foo<int>{};

Das Folgende ist eine explizite Instanziierung:

template struct foo<int>;

template <> void foo<int>(int& t); deklariert eine Spezialisierung der Vorlage mit möglicherweise unterschiedlichem Körper.

template void foo<int>(int& t); Bewirkt eine explizite Instanziierung der Vorlage, führt jedoch keine Spezialisierung ein. Es wird lediglich die Instanziierung der Vorlage für einen bestimmten Typ erzwungen.





template-specialization