在模板方法中使用typeid时,如何摆脱C4100警告?

时间:2011-09-16 13:22:04

标签: c++ visual-studio-2008 compiler-warnings

以下C ++代码使用typeid打印出参数的运行时类:

#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警告(“未参考的形式参数”)。

有没有办法摆脱警告,同时保留用简单的方法调用打印出对象类型的可能性?我宁愿不必禁用警告。

3 个答案:

答案 0 :(得分:3)

您可以使用

#pragma warning(disable : 4100)
//.. stuff
#pragma warning(default : 4100)

关闭警告,然后在完成后再打开。

答案 1 :(得分:1)

您可以使用UNREFERENCED_PARAMETER宏。

==== 由OP编辑:也可以使用

(void) object;

并避免使用宏(David Rodriguez对其的评论)。

答案 2 :(得分:-1)

这对我没有任何错误:

template <typename T>
void prn(const T&){
    std::cout << typeid(T).name() << std::endl;
}