我有一个带有模板化成员函数的模板化类
template<class T>
class A {
public:
template<class CT>
CT function();
};
现在我想以两种方式专门化模板化成员函数。首先与类具有相同的类型:
template<class T>
template<> // Line gcc gives an error for, see below
T A<T>::function<T>() {
return (T)0.0;
}
第二个用于 bool 类型:
template<class T>
template<>
bool A<T>::function<bool>() {
return false;
}
这是我尝试测试它的方法:
int main() {
A<double> a;
bool b = a.function<bool>();
double d = a.function<double>();
}
现在 gcc 给出了上面标记的行:
error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize
所以 gcc 告诉我,如果我想专门化函数,我必须专门化 A,对吧?
我不想这样做,我希望外部类的类型是开放的......
最终的答案是:不可能吗?或者有什么办法吗?
是的,这就是问题所在:
error: enclosing class templates are not explicitly specialized
如果不专门化班级,则无法专门化成员。
你什么can做的就是把代码从function
在一个单独的类中并对其进行专门化,就像 basic_string 依赖于单独的 char_traits 类一样。然后是非专业function
可以调用traits类中的助手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)