3

これは、C++ を勉強するために私が書いた単純なテンプレート progs です。

#include <type_traits>
#include <iostream>

using namespace std;

template<typename T>
T foo(T t, true_type)
{
    cout << t << " is integral! ";
    return 2 * t;
}


template<typename T>
T foo(T t, false_type)
{
    cout << t << " ain't integral! ";
    return -1 * (int)t;
}

template<typename T>
T do_foo(T t){
    return foo(t, is_integral<T>());
}

int main()
{
    cout << do_foo<int>(3) << endl;
    cout << do_foo<float>(2.5) << endl;
}

派手なことは何もしませんが、コンパイルして動作します。

その部分がどのように機能するのか疑問に思っていis_integral<T>()ます。

私はこれを読んでいました: http://en.cppreference.com/w/cpp/types/is_integralそして、私はこの動作の特定の説明を見つけることができません - の定義はありませんoperator()

4

1 に答える 1

7

is_integral<T>true_typeまたはのいずれかを継承する型ですfalse_type

is_integral<T>()はコンストラクター呼び出しであるため、これらの型のいずれかのインスタンスが への呼び出しの引数になりますfoo。過負荷は、それがどれであるかに従って選択されます。

于 2013-08-22T10:17:58.677 に答える