模板实例化时间typeid()

时间:2012-08-15 01:36:31

标签: c++ templates

如何在模板实例化时找到模板参数的类型?例如,我希望以下模板实例化为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); }

2 个答案:

答案 0 :(得分:1)

在您的情况下,听起来您需要的只是intfloat的两个重载版本。所描述的其他类型没有任何行为,因此不需要模板。

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

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

如果确实需要其他类型的情况,请添加正常的模板版本。特定的重载优先。例如,see here

答案 1 :(得分:0)

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

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

应该有效,但您需要考虑获得int &const int等的情况。