【发布时间】:2011-08-11 20:59:54
【问题描述】:
我想我现在明白为什么偏函数模板被认为是令人困惑和不必要的,因此 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);
}
这里的问题是我不能重载函数的返回类型。此外,我想专门研究的类型名不用作函数参数 - 重载无济于事的另一个原因。是的,我可以引入一个虚拟参数来强制重载,但这很丑,不是吗?
最后,为什么 C++ 中的类型不是“void”?这会让事情变得更加一致......但我可能错过了完整的画面......
【问题讨论】:
-
void是 C++ 中的一种类型,而不是数据类型(即您可以拥有void函数,但不能拥有void数据对象)。相反,如果您认为有必要,您可以尝试使用void*(转换现有数据类型)作为数据 -
您不需要专门针对
void。return返回类型为void的函数调用完全没问题。 -
哇——我怎么能错过那个'return void'的东西呢?似乎我在过去的一段时间里学到了一些错误的东西,它卡住了!非常感谢您提供许多有用的答案,非常有帮助! :-)
-
再次感谢 - 代码现在看起来更干净了,一切正常,我从你的回答中学到了很多东西 :-)
标签: c++ function templates partial-specialization