我需要为每种类型使用不同的函数,但大多数代码保持不变。
如何测试我收到的模板函数参数中的数据类型(或结构)?
答案 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)
以查看它们是否相同。