gpt4 book ai didi

c++ - 比较模板类中的枚举 - 它安全吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:37 25 4
gpt4 key购买 nike

所以,这是一个非常简单的问题,下面的例子说明了这一点。当你编译它时,编译器适本地(?)报告一个警告(我们正在比较 barfoo<int>::barbarfoo<foo>::bar ),现在给出 bar是一个枚举 - 我可以放心地忽略这个警告吗?

#include <iostream>

using namespace std;
struct foo
{
};

template <typename bob = int>
struct barfoo
{
enum bar { ONE, TWO, THREE };

bar action() const { return TWO; }
};

template <barfoo<>::bar eAction = barfoo<>::ONE>
struct IsAction
{
template <typename bf>
static bool check(bf const& cState)
{
return cState.action() == eAction;
}
};

int main(void)
{
barfoo<foo> c;

cout << IsAction<>::check(c) << endl;

return 0;
}

鉴于我坚持删除警告消息,有没有一种方法可以满足编译器的要求,无需将枚举移到外面

最佳答案

枚举的数字表示将是相同的,因此直接比较它们是安全的(或者甚至在它们之间进行转换,尽管您可能需要通过 int 来满足编译器的要求)。如果您想消除警告,一种方法是在进行比较之前将它们都转换为整数:(int)cState.action == (int)eAction。您也许可以为枚举添加一个模板化的 operator== 来自动执行此操作 - 虽然在这一点上不确定。

或者,根据您如何定义“不将枚举移到外部”,您可以派生自用于保存枚举定义的非模板化基类,如 http://codepad.org/8bVlcas3 中所示。

关于c++ - 比较模板类中的枚举 - 它安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4758946/

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