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









但是不要忘了,这种情况下编译器是要对每个函数以及调用检查的,如果你某个函数或某个函数的某一部分从未被使用到,你无法跳过,如果编译器不跳过你会收到一个错误,你可以使用模板了。
函数的偏特化也是使用了重载技术,但是毕竟它使用了模板,所以它有模板的特性。
这是两个基础的函数,在任何使用它们的地方,都不会有实质变化:












如此你可以这样使用:
doSomething(arg,Int2Type<2>());
doSomething(arg,Int2Type<0>());
doSomethingEx(arg,Type2Type<int>());
doSomethingEx(arg,Type2Type<MyClass>());
是否要提供重载级得语法包装是跟技术无关的小问题了。