模板特化:只接受某些类型的 C++ 模板(重访)

Template specialization: C++ templates that only accept certain types (revisited)

我想制作一个简单的消息模板class如下。我逐字地遵循了 chosen answer posted here 中的结构。然而,这似乎在 Visual Studio 2013 年打破了。

template<typename T> Message;

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

};

template<> Message <std::string>
{

};

IntelliSense 告诉我 Message is not a template.

在前向声明中 Message 之前放置 class 会稍微好一点,但同样令人讨厌的 IntelliSense 错误:expected and identifier在每个模板的左大括号 { 之后.

template<typename T> class Message;

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

};

template<> Message <std::string>
{

};

我应该注意到以上所有代码目前都放在一个头文件中。

您还需要在模板专业化中包含 class 关键字。我不知道为什么链接的答案不这样做。

template<typename T> class Message;

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

};

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

};