Scott Meyer发布了他的下一本书EC++11的content and status,他在书中写道,书中的一条可能是“在函数签名中避免std::enable_if
”。
std::enable_if
可以用作函数参数、返回类型或类模板或函数模板参数,以便有条件地从重载解析中删除函数或类。
在this question中,显示了所有三种解决方案。
作为函数参数:
template<typename T>
struct Check1
{
template<typename U = T>
U read(typename std::enable_if<
std::is_same<U, int>::value >::type* = 0) { return 42; }
template<typename U = T>
U read(typename std::enable_if<
std::is_same<U, double>::value >::type* = 0) { return 3.14; }
};
作为模板参数:
template<typename T>
struct Check2
{
template<typename U = T, typename std::enable_if<
std::is_same<U, int>::value, int>::type = 0>
U read() { return 42; }
template<typename U = T, typename std::enable_if<
std::is_same<U, double>::value, int>::type = 0>
U read() { return 3.14; }
};
作为返回类型:
template<typename T>
struct Check3
{
template<typename U = T>
typename std::enable_if<std::is_same<U, int>::value, U>::type read() {
return 42;
}
template<typename U = T>
typename std::enable_if<std::is_same<U, double>::value, U>::type read() {
return 3.14;
}
};
std::enable_if
”涉及到作为返回类型的使用(这不是普通函数签名的一部分,而是模板specializations)?https://stackoverflow.com/questions/14600201
复制相似问题