整数映射和类型映射

本文探讨了在编译器中,虽然函数无法偏特例化,但可以通过重载实现类似功能。编译器会针对每个函数调用进行检查,即使未使用的函数也会引发错误。模板的使用提供了函数偏特化的可能性。示例展示了如何使用Int2Type和Type2Type在不同场景下进行映射操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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>());

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值