如何在模板实例化时找到模板参数的类型?例如,我希望以下模板实例化为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); }
答案 0 :(得分:1)
在您的情况下,听起来您需要的只是int
和float
的两个重载版本。所描述的其他类型没有任何行为,因此不需要模板。
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
等的情况。