【发布时间】:2015-10-22 21:30:19
【问题描述】:
我正在尝试做一些类似错误管理器类的事情,将枚举值链接到字符串和其他不重要的事情。
当我编写代码时,我停下来做一些让我好奇的事情,这是否可能。我的做法是,我的类有一个 QHash 对象,它将在构造函数中填充:
class PrtsERrs {
private:
QHash<int, QString> err;
public:
PrtsErrs() {
err.insert(MyEnum::ZERO_VALUE, "zero");
err.insert(MyEnum::ONE_VALUE, "one");
...
}
}
但我认为这是“错误的”,然后我试图找到更好或“正确的方法”但我失败了。
我想做的是这样的:
namespace Errs {
enum Errs {
ERR_TEST1 = 0,
ERR_TEST2,
ERR_TEST3
};
}
class PrtsErrs {
private:
const QHash<Errs::Errs, QString> errStr;
public:
PrtsErrs() : errStr ({Errs::ERR_TEST1, "Test"},
{Errs::ERR_TEST2, "Test2"},
{Errs::ERR_TEST3, "Test3"}
) {}
QString errStr(Errs::Errs errCode) const { return errStr[errCode];}
};
是否可以使用 c++11 和 Qt 做类似的事情?如果是这样,这是最好的方法吗?
【问题讨论】:
-
试试
errStr {{Errs::ERR_TEST1, "Test"}, {Errs::ERR_TEST2, "Test2"}, {Errs::ERR_TEST3, "Test3"} } -
@MariusBancila 不成功:/,但谢谢!
error: cannot convert '<brace-enclosed initializer list>' to 'const QHash<Errs::Errs, QString>*' in initialization -
您使用的是什么 Qt 版本?在 Qt 5.5 中,
QHash有一个构造函数,它采用initializer_list。 -
@MariusBancila 哦,对不起,它确实有效。不知道为什么,但是在我修改了我的代码以使用
std::map之后,我再次将其更改为QHash并且它起作用了!