2016-06-29 14 views
1

Ich möchte eine einfache Nachrichtenvorlagen-Klasse wie folgt erstellen. Ich folgte der Struktur wörtlich aus der chosen answer posted here. Dies scheint jedoch 2013.Template-Spezialisierung: C++ - Vorlagen, die nur bestimmte Typen akzeptieren (erneut besucht)

template<typename T> Message; 

template<> Message <std::vector<uint8_t>> 
{ 
public: 

}; 

template<> Message <std::string> 
{ 

}; 

IntelliSense mich in Visual Studio zu brechen sagt, dass Message is not a template.

Platzieren class vor Message in der vorausen Erklärung ergibt ein etwas besseren, aber ebenso lästig IntelliSense Fehler: expected and identifier nach der Öffnung Verstrebung { jeder Schablone.

template<typename T> class Message; 

template<> Message <std::vector<uint8_t>> 
{ 
public: 

}; 

template<> Message <std::string> 
{ 

}; 

Ich sollte beachten, dass alle oben genannten Code derzeit in einer Header-Datei platziert wird.

+0

Das sollte funktionieren (zweiten veröffentlichten Code)! Beachten Sie, dass ältere C++ - Compiler Leerzeichen zwischen '' '' '' '' '' '' einfügen müssen. Ist '' Header enthalten? Veröffentlichen Sie die vollständigen Fehlermeldungen. –

+1

Platziere 'Klasse' vor' Nachricht' überall (sowohl in Deklaration als auch in Spezialisierungen). – lorro

+0

verknüpfte Antwort auch behoben. – Jarod42

Antwort

1

Sie müssen das Schlüsselwort class auch in die Vorlagenspezialisierung einschließen. Ich weiß nicht, warum die verknüpfte Antwort das nicht tut.

template<typename T> class Message; 

template<> class Message <std::vector<uint8_t>> 
{ 
public: 

}; 

template<> class Message <std::string> 
{ 

};