我尝试做类似错误管理器类的事情,将枚举值链接到字符串以及其他不重要的事情。
当我编码的时候,我停下来让我好奇的东西是否可能。我的方式,我的类有一个QHash对象,将在构造函数中填充:
class PrtsERrs {
private:
QHash<int, QString> err;
public:
PrtsErrs() {
err.insert(MyEnum::ZERO_VALUE, "zero");
err.insert(MyEnum::ONE_VALUE, "one");
...
}
}
但我认为它错了#34;然后我试图找到更好的东西或者#34;正确的方式&#34;但我失败了。
我尝试做的事情是这样的:
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做类似的事吗?如果是这样,这是最好的方式吗?
答案 0 :(得分:4)
在C ++ 11及更高版本中,您可以执行以下操作(使用C ++标准库中的类而不是QHash
和QString
;您可以使用{{1} } / QHash
稍加修改一下):
QString
您可以试用上面的代码here。但是,我不是要将类转换为字符串,而是recommend making a non-member function。如:
#include <iostream>
#include <map>
namespace Errs {
enum Errs {
ERR_TEST1 = 0,
ERR_TEST2,
ERR_TEST3
};
}
class PrtsErrs {
private:
const std::map<Errs::Errs, std::string> errStr {
{ Errs::Errs::ERR_TEST1, "ERR_TEST1" },
{ Errs::Errs::ERR_TEST2, "ERR_TEST2" },
{ Errs::Errs::ERR_TEST3, "ERR_TEST3" }
};
public:
std::string GetErrStr(Errs::Errs errCode) const
{
return errStr.at(errCode);
}
} ;
int main()
{
PrtsErrs foo ;
std::cout << foo.GetErrStr(Errs::Errs::ERR_TEST2) << std::endl ;
return 0;
}
尝试上述功能here。