我正在尝试执行类似错误管理器类的操作,将枚举值链接到字符串和其他不重要的东西。
当我编写代码时,我停下了让我感到好奇的事情。我做的方式是,我的类有一个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做类似的事情吗?如果是这样,这是最好的方法吗?
在C ++ 11及更高版本中,您可以执行以下操作(使用C ++标准库中的类代替QHash
and QString
;可以对它进行一些较小的修改,使其与QHash
/QString
一起使用):
#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;
}
您可以在此处尝试上面的代码。但是,我建议不要制作一个将成员枚举转换为字符串的类,而建议制作一个非成员函数。如:
std::string errs_to_string(Errs::Errs errCode)
{
static 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" }
};
return errStr.at(errCode) ;
}
在这里尝试上述功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句