首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

只特化一个种模板的某一个成员函数

2012-07-16 
只特化一个类模板的某一个成员函数有类定义如下C/C++ codetemplateclass T, unsigned Bclass Base{//应

只特化一个类模板的某一个成员函数
有类定义如下

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/C++ code

#include <iostream>

template<class T, unsigned B>
struct Base
{
void Func () { std::cout << "primary" << std::endl; }
};

template <cla
我的这个类有很多函数,但只有一个函数的实现需要依赖于第2个值参数,如果把整个类特化就得把其它所有的函数代码复制一遍。

我想实现的就是#16的效果,只是想通过在编译期的模板实现
……

[解决办法]
默认函数模板参数需要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反倒是最一目了然的方法。
[解决办法]
解决“方案”离问题本身越来越远,越来越复杂,也就越来越丑陋。
[解决办法]
探讨
我的2010过不去啊,你用SP1?

[解决办法]
探讨

引用:
你不是在 #22 已经“大功告成”了吗,怎么这会又说目标实现不了了?


还得让函数对象访问外部成员,费劲不讨好。

我说的实现不了就是 不能对成员函数偏特化

热点排行