整数映射和类型映射

来源:互联网 发布:爸爸去哪儿 马蓉 知乎 编辑:程序博客网 时间:2024/05/21 18:42

是的,函数无法偏特例化,但是这并不是没有解决的办法。可是这里有问题,我们真的需要吗?重载是一个与之有相同功能的技术:

struct ST1{};
struct ST2{};
struct ST3{};
void    fun(ST1& rh);
void    fun(ST2& rh);
void    fun(ST3& rh);

 但是不要忘了,这种情况下编译器是要对每个函数以及调用检查的,如果你某个函数或某个函数的某一部分从未被使用到,你无法跳过,如果编译器不跳过你会收到一个错误,你可以使用模板了。

函数的偏特化也是使用了重载技术,但是毕竟它使用了模板,所以它有模板的特性。
这是两个基础的函数,在任何使用它们的地方,都不会有实质变化:

template    <int    v>
struct    Int2Type
{
    
enum    {value    = v};
}
;
template    
<class T>
{
    typedef    T    OriginalType;
}
;

如此你可以这样使用:
doSomething(arg,Int2Type<2>());
doSomething(arg,Int2Type<0>());
doSomethingEx(arg,Type2Type<int>());
doSomethingEx(arg,Type2Type<MyClass>());

是否要提供重载级得语法包装是跟技术无关的小问题了。

原创粉丝点击