c++ - 检查 bool 模板参数时摆脱 "conditional expression is constant"警告的方法?

标签 c++ templates

使用/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"; }

Live example

关于c++ - 检查 bool 模板参数时摆脱 "conditional expression is constant"警告的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28376111/

相关文章:

c++ - c++ 主要用于哪个领域?

c++ - 函数模板作为类模板的参数

c++ - 使用运行时参数桥接模板

c - 是否可以在 C 中编写与类型无关的函数,并在实现中派生类型?

angular - 作为 Angular2 组件的 Typescript 泛型类

c++ - 如何绕过模板虚函数来实现我的目标?

c++ - 关于C++对象序列化技术的建议

c++ - WinHTTP 是在下载空字节还是我错误地复制了结果缓冲区?

c++ - 如何在 Qt 中使用 SQLite

c++ - 这个数组声明有什么问题?