【发布时间】:2014-04-01 06:57:36
【问题描述】:
考虑以下两个声明:
template <class Function,
class = typename std::enable_if</*Function has zero argument*/>::type>
void apply(Function&& function);
template <class Function,
class... Dummy,
class = typename std::enable_if</*Function has one argument*/>::type,
class = typename std::enable_if<sizeof...(Dummy) == 0>::type>
void apply(Function&& function, Dummy...);
当函数有零个或一个参数(不管参数的类型)时,我应该在第一种和第二种情况下在std::enable_if 中输入什么来约束重载?
【问题讨论】:
-
首先,我不建议这样使用默认模板 arg。通常你不知道函数是否可以用一个参数调用,而不管类型如何。在某些情况下,可以转换为任何内容的虚拟类型可能会起作用,但如果函数使用 SFINAE,则不会。
-
为什么你会关心一个函数是否可以用一个参数调用但你不知道参数的类型?如果你不知道参数的类型,你不可能调用它。您可以调用它的唯一场景是您知道参数类型的场景。
标签: c++ c++11 metaprogramming overloading sfinae