使用/W4 (MSVC 2013) 编译时,此代码模板会生成“条件表达式为常量”警告:
#include <iostream>
template <bool condition>
struct Conditional
{
static void f()
{
if (condition)
std::cout << "true";
else
std::cout << "false";
}
};
void main()
{
Conditional<false>::f();
}
现在,假设Conditional
实际上是一个有用的类,有很多方法和围绕条件的大量代码。我想通过尽可能少的代码修改来消除警告。
我知道的唯一技巧是标签调度。这是可以接受的,但有点笨拙,因为我需要声明 2 个附加方法并在那里提取条件代码。还有其他方法吗?
最佳答案
您可以使用特化:
template <bool condition>
struct Conditional
{
static void f();
};
template <>
void Conditional<true>::f() { std::cout << "true"; }
template <>
void Conditional<false>::f() { std::cout << "false"; }
关于c++ - 检查 bool 模板参数时摆脱 "conditional expression is constant"警告的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28376111/