テンプレート変数を使用して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は2倍のコードがあり、そのほとんどは無関係です。 – user673679
SFINAEの概念は、過負荷も部分的な特殊化もできないため、可変テンプレートには意味がありません。 – Brian