C++:不允许void的部分函数专门化 - 替代解决方案?

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'类型?这会让事情变得更加一致......但我可能错过了完整的画面......

Pup*_*ppy 7

我相信,首先,如果你有一个返回void的函数,那么它对于returnvoid表达式是完全合法的 - 比如调用另一个返回void的函数,其次,它void C++中的完整类型,你可以将它传递给模板尽可能多.