1

別の日、失敗したテンプレート メタプログラミングの別の実験。is_greater_than2 つの整数値NMtypeを受け取るテンプレートを作成しようとしていますT

template<typename T, T N, T M>
struct is_greater_than<void, N, M>;

template<typename T = std::enable_if<std::is_integral<T>::value, T>::value, T N, T M>
struct is_greater_than<T, N, M>
{
    static const bool value = N > M;
};

私ができる限り試してみてください。これを機能させることができないようです。これをコンパイルしようとすると、112 のコンパイラ エラーが発生します。http://ideone.com/ch1j7b : ここにイデオン フィドルがあります。

ここで何が間違っていますか?どんな助けでも大歓迎です!

4

3 に答える 3

3

これを試して:

template<typename T, T N, T M, typename enable = void>
struct is_greater_than;

template<typename T, T N, T M>
struct is_greater_than<T,N,M, 
       typename std::enable_if<std::is_integral<T>::value>::type>
{
    static const bool value = N > M;
};

int main()
{
    bool a = is_greater_than<int, 11, 10>::value;

    cout << boolalpha << a << endl;
}

出力:

真実

ライブコード

于 2013-10-04T08:14:42.067 に答える