【发布时间】:2018-10-28 11:14:43
【问题描述】:
我在cplusplus.com 被推荐给"Explicit Template Instantiation",这给出了以下示例:
template <typename T> class Example
{
public:
Example( T test )
{
_data = test;
}
void setTest(T test)
{
_data = T;
}
private:
T _data;
};
class template Example<int>;
class template Example<float>;
class template Example<double>;
除了对我来说似乎是一个遗漏错误,其中尝试将类型分配给成员变量 -- _data = T 而不是我认为应该是 _data = test -- 我不明白的是最后 3 行是否声明或指示编译器这样做,究竟是什么?
我知道模板是什么,用它们构建了程序,并且大致了解它们的实例化和专业化。我对后两者的理解可能确实存在一些漏洞,但我通常使用例如指示显式模板实例化。 template class Example<int>; 形式,而不是 sn-p 中显示的形式。
我尝试使用g++ -std=c++11 -pedantic 编译sn-p,它编译得很好并且没有警告(我首先更正了上面的_date = T 错误)。
这是在我评论 an answer to a related question 之后发生的,我仍然不确定 sn-p 中的最后 3 行中的任何一个是模板特化还是实例化。
我也尝试在C++11 draft published by ISO 中找到相关的语法产生规则(在class 之后允许template),但空手而归。
【问题讨论】:
-
我经常被告知 cplusplus.com 是出了名的糟糕。现在我明白为什么了。写那篇文章的人没有费心检查他们的代码或事实。
-
您倒退了,cppreference 具有高质量标准。 Cplusplus.com 是可疑的。
-
@HolyBlackCat 从我收集的内容来看,它并没有对
class template ...语法有任何启示。这并不是说我不感谢您在这方面的关注或努力! -
@amn 正如 StoryTeller 的链接所示,
class template ...似乎根本不是一个有效的语法(尽管 GCC 接受它)。查看您帖子中链接的文章,它们似乎实际上是指template class ...。我链接的段落解释了这种语法。