繁体   English   中英

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

[英]How can I get rid of C4100 warning when using typeid in a template method?

以下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警告(“未引用的形式参数”)。

有什么方法可以消除警告,同时保留通过简单方法调用打印出对象类型的可能性? 我希望不必禁用该警告。

您可以使用

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

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

您可以使用一个UNREFERENCED_PARAMETER宏。

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

(void) object;

并避免使用该宏(对David Rodriguez的评论对此致谢)。

这对我有效,没有任何错误:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM