静态条件下的编译器警告
我使用模板参数来确定是否必须执行某种行为。但是此代码在 VS2008 上生成警告: Warning 26 warning C4127: conditional expression is constant
这里是代码示例:
template <class param, bool param2=true>
class superclass1
{
public:
int foo()
{
if(param2)
doSomthingMore();
return 1;
}
};
有没有办法转换代码以删除警告并获得相同的功能?
I use a template parameter to determine if a certain behavior must be done or not. But this code generate a warning on VS2008 : Warning 26 warning C4127: conditional expression is constant
Here an exemple of the code :
template <class param, bool param2=true>
class superclass1
{
public:
int foo()
{
if(param2)
doSomthingMore();
return 1;
}
};
Is there a way to tranform the code to remove the warning and get the same features?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是通过部分专业化来完成的。最粗略的版本如下所示:
更复杂的方法可能会声明一个成员模板函数并仅对其进行特殊化。这是带有辅助标签类的解决方案:
This is done via partial specialization. The crudest version looks like this:
A more sophisticated approach might declare a member template function and only specialize that. Here's a solution with auxiliary tag classes:
或者只是用
#pragma warning(disable : 4127 )
和#pragma warning(default: 4127 )
括住敏感代码,以避免两次编写相同的逻辑(尽管它不适用)问题中描述的简单情况)。Or just enclose your sensitive code with
#pragma warning( disable : 4127 )
and#pragma warning( default: 4127 )
to avoid writing the same logic twice (though it doesnt apply to the simple case described in the question).