gpt4 book ai didi

c++ - 静态条件中的编译器警告

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:49 24 4
gpt4 key购买 nike

我使用模板参数来确定是否必须执行某个行为。但是此代码在 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;
}
};

有没有办法转换代码以删除警告并获得相同的功能?

最佳答案

这是通过部分特化完成的。最粗糙的版本如下所示:

template <typename, bool> class superclass1;

template <class param> class superclass1<param, true>
class superclass1
{
public:
int foo()
{
doSomthingMore();
return 1;
}
};

template <class param> class superclass1<param, false>
class superclass1
{
public:
int foo()
{
return 1;
}
};

一种更复杂的方法可能会声明一个成员模板函数并且只特化那个。这是一个带有辅助标签类的解决方案:

#include <type_traits>

template <bool B> class Foo
{
struct true_tag {};
struct false_tag {};
void f_impl(true_tag = true_tag()){} // your code here...
void f_impl(false_tag = false_tag()){} // ... and here

public:
void foo()
{
f(typename std::conditional<B, true_tag, false_tag>::type());
}
};

关于c++ - 静态条件中的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8161778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com