使用在C++中作为模板传递的类型

moa*_*lon 2 c++ templates

是否可以实际使用作为控制流模板传递的类型?我想编写一个使用模板的函数,模板又根据传递的类型调用另一个函数:

template <class T> void test_function (T var)
{
    //Do stuff
    if (T == char) {
        bar (var);
    } else {
        foo (var);
    }
    //Do even more stuff
}
Run Code Online (Sandbox Code Playgroud)

如果没有,我将不得不回到枚举......

编辑:到目前为止,所有答案都建议我使用模板专业化.我不是很具体,但这与完全不使用模板是一样的,因为对于每种不同的类型,都有一个不同的函数调用.

Geo*_*che 6

您通常使用专门化:

template<class T> void forward(T t) {
    // ...
}

template<> void forward<char>(char c) {
    // ...
}

template<class T> void test(T t) {
    forward<T>(t);
}
Run Code Online (Sandbox Code Playgroud)

这为您提供了有效的"编译时分支".