3

整数値ラッパーがあるとします。たとえば、std::true_typeandのようなブール値のラッパーstd::false_type:

template<typename T , T VALUE>
struct integral_value_wrapper
{
    static const T value = VALUE;
};

template<bool VALUE>
using boolean_wrapper = integral_value_wrapper<bool,VALUE>;

using true_wrapper  = boolean_wrapper<true>;
using false_wrapper = boolean_wrapper<false>;

そのブールラッパーを独自のクラスに使用します。たとえば、int チェッカーは次のようになります。

template<typename T>
struct is_int : public false_wrapper {};

template<>
struct is_int<int> : public true_wrapper {};


using type = int;

int main()
{
    if( is_int<type>::value ) cout << "type is int" << endl;
}

私の質問は次のとおりです:型(この場合はboolラッパーから継承するクラス)を整数値に暗黙的にキャストする方法はありますか?

::valueこれにより、次の例のように、ブール式でメンバーを使用することを回避できます。

using type = int;

int main()
{
    if( is_int<type> ) cout << "type is int" << endl;  //How I can do that?
}
4

1 に答える 1

2

が必要な場所に型を指定することはできません。しかし、ラッパーに変換演算子を追加すると、次のようになります。

template<typename T , T VALUE>
struct integral_value_wrapper
{
    static constexpr T value = VALUE;
    constexpr operator T () const { return value; }
};

次に、次のように記述できます。

if ( is_int<type>() )
//               ^^

これは、標準の型特性が行うことです。

于 2013-06-15T22:25:22.137 に答える