Pee*_*ynt 4 c++ templates function partial-specialization
我想我现在明白为什么部分函数模板被认为是混乱和不必要的,因此C++标准不允许这样做.然而,我会感谢一些帮助,重新措辞以下功能没有部分专业化.FWIW,该函数是非专业类的成员:
template <typename IMPL, typename RET>
RET call (functor <IMPL> func,
IMPL * impl)
{
return func.call (impl);
}
template <typename IMPL>
void call <IMPL, void_t> (functor <IMPL> func,
IMPL * impl)
{
func.call (impl);
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我不能重载函数的返回类型.另外,我想要专门研究的typename不用作函数参数 - 这也是为什么重载没有帮助的另一个原因.是的,我可以引入一个虚拟参数,强制重载,但这很难看,不是吗?
最后,为什么heck在C++中不是'void'类型?这会让事情变得更加一致......但我可能错过了完整的画面......
我相信,首先,如果你有一个返回void的函数,那么它对于returnvoid表达式是完全合法的 - 比如调用另一个返回void的函数,其次,它void 是 C++中的完整类型,你可以将它传递给模板尽可能多.