在C++中定义函数模板或类模板时,可以这样写:
template <class T> ...
Run Code Online (Sandbox Code Playgroud)
或者可以这样写:
template <typename T> ...
Run Code Online (Sandbox Code Playgroud)
是否有充分理由偏好一个而不是另一个?
我接受了最受欢迎(也很有趣)的答案,但真正的答案似乎是"不,没有理由偏爱另一个."
typename.class.但是,请注意,在模板模板参数的情况下,需要使用class而不是typename.请参阅下面的user1428839的答案.(但这个特殊情况不是偏好问题,而是语言的要求.)(这也会改变typename)
我需要为某些类型专门化模板成员函数(比如说double).它工作正常,而类X本身不是模板类,但是当我创建模板时,GCC开始给出编译时错误.
#include <iostream>
#include <cmath>
template <class C> class X
{
public:
template <class T> void get_as();
};
template <class C>
void X<C>::get_as<double>()
{
}
int main()
{
X<int> x;
x.get_as();
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息
source.cpp:11:27: error: template-id
'get_as<double>' in declaration of primary template
source.cpp:11:6: error: prototype for
'void X<C>::get_as()' does not match any in class 'X<C>'
source.cpp:7:35: error: candidate is:
template<class C> template<class T> void X::get_as()
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?这里有什么问题?
提前致谢.