是否可以像这样重载功能模板(仅使用enable_if在模板参数上):
template <class T, class = std::enable_if_t<std::is_arithmetic<T>::value>>
void fn(T t)
{
}
template <class T, class = std::enable_if_t<!std::is_arithmetic<T>::value>>
void fn(T t)
{
}
如果enable_if
中的条件不重叠?我的MSVS编译器抱怨'void fn(T)' : function template has already been defined
。如果没有,那么替代方案是什么(理想情况下不将enable_if
放在模板参数之外的任何地方)?
答案 0 :(得分:3)
默认参数在确定函数的唯一性方面不起作用。所以编译器看到的是你定义了两个函数,如:
enable_if
重新定义相同的功能,因此错误。你可以做的是让template <class T, std::enable_if_t<std::is_arithmetic<T>::value, int> = 0>
void fn(T t) { }
template <class T, std::enable_if_t<!std::is_arithmetic<T>::value, int> = 0>
void fn(T t) { }
本身成为模板非类型参数:
=IF( (IF(C2="Recruitment",1,0)+IF(D2="Secondment In",1,0)) > 0 , 1 , 0)
现在我们有不同的签名,因此功能不同。 SFINAE将负责按预期从过载设置中移除一个或另一个。