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