以下C++代码使用typeid
打印出来的运行时类的参数的:在模板方法中使用typeid时,如何摆脱C4100警告?
#include <iostream>
class Foo
{
};
class Bar: public Foo
{
};
template <class O> void printTypeName(O& object)
{
std::cout << typeid(object).name();
}
int main(void)
{
Bar x;
printTypeName(x);
}
由于Foo
不是多态的,VS C++不使用该对象来确定的类型信息,并提出
C4100警告(“未引用的形式参数”)。
有没有什么办法摆脱这个警告,同时保留用一个简单的方法调用打印出对象类型的可能性?我宁愿不必禁用警告。
[工程在克细++](http://www.ideone.com/yDKIq)。 – iammilind
我认为,如果将'typeid'应用于非多态类型,那么该警告是一种很好且容易获得诊断的方法。尝试添加一个虚拟析构函数到'Foo'。 MSVC可能会忽略警告。 –
@Johannes将'typeid'应用于非多态类型时出了什么问题? –