2

特殊化 (つまり、テンプレート化された型) を検出する特性がある場合:

template <typename T>
struct is_specialisation : std::false_type {
};

template <template <typename...> class U, typename... Args>
struct is_specialisation<U<Args...>> : std::true_type {
};

これは期待どおりに機能します。

traits::is_specialisation<std::vector<int>>::value;              // True
traits::is_specialisation<std::string_view>::value;              // True
traits::is_specialisation<std::tuple<char, int, double>>::value; // True
traits::is_specialisation<float>::value;                         // False

パラメータ パック タイプの 1 つが実際に値である場合を除きます。

traits::is_specialisation<std::array<char, 4>>::value;  // False

これは、template <typename...> class U宣言が特にtypes用であるためです。切り替えた場合、すべての値を受け入れるようになりますが、型template <auto...> class Uの混合を取ることができると宣言する方法はありますか?

4

0 に答える 0