【发布时间】:2018-08-29 18:19:05
【问题描述】:
假设我们有一些 SFINAE 成员函数:
class foo{
template <class S, class = std::enable_if_t<std::is_integral<S>::value, S>
void bar(S&& s);
template <class S, class = std::enable_if_t<!std::is_integral<S>::value, S>
void bar(S&& s);
}
如果我们像上面那样声明它,那么我们如何定义它们呢?他们的两个函数签名看起来像:
template <class S, class>
inline void foo::bar(S&& s){ ... do something ... }
我见过一个返回 std::enable_if_t<...> 的示例,例如:
template <class S, class>
auto bar(S&& s) -> std::enable_if_t<!std::is_integral<S>::value, S>(...){
... do something ...
}
根据返回类型来消除歧义。但我不想退货。
【问题讨论】:
-
看起来您实际上并没有使用 C++11。如果您实际上使用的是 C++17,我们可以使用 constexpr if 语句让事情变得更简单
标签: c++ c++11 templates sfinae enable-if