0
我可以对模板变量使用enable_if(或者是否存在一些替代技术)。例如可变模板和std :: enable_if
typedef float Float;
typedef double Double;
template<class T>
constexpr Bool IsFloat = std::is_same_v<T, Float>;
template<class T>
constexpr Bool IsDouble = std::is_same_v<T, Double>;
template<class T>
constexpr Bool IsFloatingPoint = IsFloat<T> || IsDouble<T>;
template<class T>
using EnableIfFloatingPoint = std::enable_if_t<IsFloatingPoint<T>>;
template
<
class T,
typename = EnableIfFloatingPoint<T>
>
constexpr T Pi = T(3.1415926535897932384626433832795);
Visual Studio中给了我一个编译器错误说“太少模板参数”当我尝试使用Pi<float>
,例如。
有点困惑为什么你没有在这篇文章中加入IsFloatingPoint。 – WhozCraig
@WhozCraig因为现在有两倍的代码,而且大部分代码都是不相关的。 – user673679
SFINAE的概念对变量模板没有意义,因为它们既不能过载也不能部分专用。 – Brian