是否有可能做这种专业化?
如果是这样,怎么样?C++模板成员专业化 - 这是一个编译器限制吗?
有问题的专门标记//这种专业化将无法编译 我使用VS2008,VS2010,GCC 4.4.3既不可以编译此。
我知道我可以通过重载来避免这个func但我想知道是否有办法用模板专业化来做到这一点。 (不切实际/不可取的,虽然它可能是)
#include<iostream>
#include<string>
using namespace std;
template <typename ALPHA>
class klass{
public:
template <typename BETA>
void func(BETA B);
};
template <typename ALPHA> template <typename BETA>
void klass<ALPHA>::func(BETA B){
cout << "I AM A BETA FUNC: " << B <<endl;
}
//THIS SPECIALIZATION WILL NOT COMPILE
template <typename ALPHA> template <>
void klass<ALPHA>::func(string B){
cout << "I AM A SPECIAL BETA FUNC: " << B <<endl;
}
int main(){
klass<string> k;
k.func(1);
k.func("hello");
return 0;
}
如果您将专业化更改为'void klass :: func (string B);'?这样它就是一个功能模板的全面专业化(在模板类中)。至少,我想,我现在没有编译器。 –
Pieter
2010-06-10 14:55:26
用g ++示例编译器没有错误。 – sth 2010-06-10 15:01:26