gpt4 book ai didi

c++ - 从枚举标志中打印出选定的项目

转载 作者:行者123 更新时间:2023-11-28 05:54:19 37 4
gpt4 key购买 nike

我有以下枚举(稍后会变大!):

enum TrainingFilters {
NONE = 0,
GAUSS = 1,
SOBEL = 2,
FEATURE = 4
};

我必须打印出所有可能组合的字符串表示形式。目前,一个不长的 switch 语句工作正常,但如果我添加更多项目,那将是一场灾难!

void Manager::setFilters(int filters)
{
QString what("Selected filters:");

switch (filters) {
case 0:
what.append(" NONE ");
break;

case 1:
what.append(" GAUSS ");
break;

case 1 | 2:
what.append(" GAUSS SOBEL ");
break;

case 2:
what.append(" SOBEL ");
break;
case 2 | 4:
what.append(" SOBEL FEATURE ");
break;

case 4:
what.append(" FEATURE ");
break;

case 1 | 4:
what.append(" GAUSS FEATURE ");
break;

case 1 | 2 | 4:
what.append(" GAUSS SOBEL FEATURE ");
break;

default:
qDebug() << "Invalid FILTERS enum received!";
return;
}

qDebug() << what;
mFilters = static_cast<TrainingFilters>(filters);
}

P.S:我在用户界面中有几个复选框项目,我应该根据选中的复选框做一些事情。我这样使用它:

var a, b,c;
cbGauss.checked ? a = 1 : a = 0;
cbSobel.checked ? b = 2 : b = 0;
cbFeat.checked ? c = 4 : c = 0;

cpManager.setFilters(a | b | c);

所以我的问题是实现此目标的最佳/最简单/最聪明的方法是什么?

最佳答案

你可以简单地做

if (filters & 1)
what.append("GAUSS ");
if (filters & 2)
what.append("SOBEL ");
if (filters & 4)
what.append("FILTER ");

等等。这样您就可以轻松添加新的。当然,您必须检查零,然后添加 NONE。

关于c++ - 从枚举标志中打印出选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34550570/

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