C ++:如何检查模板函数中使用的数据类型?

时间:2010-11-24 19:02:43

标签: c++ visual-studio-2008 templates

我需要为每种类型使用不同的函数,但大多数代码保持不变。

如何测试我收到的模板函数参数中的数据类型(或结构)?

3 个答案:

答案 0 :(得分:6)

如何测试我收到的模板函数参数中的数据类型(或结构)?

你为什么要这样?如果您想使用模板,那是因为每种类型的代码都相同。否则你只需使用常规的重载函数。

另一方面,如果只是算法的一部分需要特定于类型,那么使用从模板主函数调用的重载子函数没有任何停止:

template <typename T>
bool IsFooBar(T Baz)
{
    // here the code is common for every type
    // ...
    // Here Baz must be modified in a type-speficic way:
    DoQuux(Baz);
    // ...
    return /* ... */;
}

// DoQuux is a regular overloaded function
void DoQuux(int & Baz)
{
    // ...
}

void DoQuux(double & Baz)
{
    // ...
}

void DoQuux(std::string & Baz)
{
    // ...
}

// ... other DoQuux ...

答案 1 :(得分:1)

答案 2 :(得分:0)

如果部分模板专精化不够,可以使用RTTI将对象类型与另一个对象的类型进行比较。例如,如果您的模板采用了两种类型的参数,则可以测试typeid(T) == typeid(U)以查看它们是否相同。