有没有办法让这段代码有效?
template<typename T> class test{
public:
template<typename T2> static void f(){
cout<<"generic"<<endl;
}
template<> static void f<void>(){ //specialization of static method for template T2, within generic class template with argument T
cout<<"void"<<endl;
}
};
如果没有,是因为它算作函数的部分模板特化吗?
答案 0 :(得分:4)
正如其他人在评论和链接中指出的那样,当前的C ++模板语法没有提供支持这种用法的简单方法。但是,如果你真的想这样做,你不介意介绍一些复杂性。
您必须处理的两个主要问题是:
要绕过他们并接近你正在寻找的东西,你可以尝试。
template<typename T>
class test
{
public:
template <typename T2>
static void f();
};
template <typename T1, typename T2>
struct f
{
void operator ()(void) { cout << "generic" << endl; }
};
template <typename T1>
struct f<T1, void>
{
void operator ()(void) { cout << "void" << endl; }
};
template <typename T>
template <typename T2>
void test<T>::f()
{
::f<T, T2>()();
}
int main()
{
test<int>::f<int>(); // prints 'generic'
test<int>::f<void>(); // prints 'void'
}
这是为这样的事情引入的大量额外代码,但我想如果你想做到这么糟糕就有可能。