0

テンプレートのインスタンス化時にテンプレート引数のタイプを見つけるにはどうすればよいですか?たとえば、次のテンプレートを引数に応じて2つの異なる関数にインスタンス化したいと思います。

template <typename T> void test(T a) {
    if-T-is-int {
        doSomethingWithInt(a);
    } else {
        doSomethingElse(a);
    }
}

でインスタンス化するとint、結果の関数は次のようになります。

void test(int a) { doSomethingWithInt(a); }

floatたとえば、インスタンス化すると、次のようになります。

void test(float a) { doSomethingElse(a); }
4

2 に答える 2

1
template <typename T> void test(T a) {
    doSomethingElse(a);
}

template <> void test(int a) {
    doSomethingWithInt(a);
}

int &動作するはずですが、、const intなどを取得する場合を考慮する必要があります。

于 2012-08-15T01:38:58.913 に答える
1

あなたの場合、必要なのはとの2つのオーバーロードされたバージョンだけのようintですfloat。説明されている他のタイプの動作はないため、テンプレートは必要ありません。

void test (int i) {
    doSomethingWithInt(i);
}

void test (float f) {
    doSomethingElse(f);
}

他のタイプのケースが必要な場合は、通常のテンプレートバージョンを追加してください。特定のオーバーロードが優先されます。例については、こちらをご覧ください

于 2012-08-15T01:50:12.803 に答える