只特化一个类模板的某一个成员函数
有类定义如下
- C/C++ code
template<class T, unsigned B>class Base{//应被特化的函数void Func(){}};
现在只想在模板参数B为16时对函数Func进行特化,应该怎么做?
搜了半天也没找到可行的解决方案,希望大家帮帮忙,谢谢
[解决办法]
答案我记得写在《C++ templates》上,自己认真翻翻吧。
我记得是:不可以。但是,我听说部分编译器扩展支持。
[解决办法]
class A
{
public:
A(){}
~A(){}
template <class T>
void func(T t) {cout << t;}
}
int main()
{
A a;
a.func(100);
return 0;
}
[解决办法]
- C/C++ code
template<class T, unsigned B>class Base{public: void Func() { if (B == 16) { cout << "helloworl"; } }};int _tmain(int argc, _TCHAR* argv[]){ Base<int,16> base; base.Func();}
[解决办法]
[解决办法]
默认函数模板参数需要c++0x的支持。
常规的,不过很别扭,毕竟是反的。
template <class T, unsigned B> class Base;
template <class T> class Base<T, 16> { };
template <class T, unsigned B> class Base : public Base<T, 16> { };
[解决办法]
内部函数对象的话,如果要访问外部对象成员,又得多费手脚了。
传统的switch-case反倒是最一目了然的方法。
[解决办法]
解决“方案”离问题本身越来越远,越来越复杂,也就越来越丑陋。
[解决办法]
[解决办法]