我喜欢使用enum类来尽可能地避免硬编码值,但是当涉及到字符串时它会更复杂一些。我有一个设计我想分享,我觉得有点笨重,我会喜欢一些关于如何简化它的想法。
class StringDefinition
{
private:
StringDefinition(const std::string &def);
public:
bool operator==(const StringDefinition&rhs) const;
public:
static const StringDefinition StringDefinitionOne;
static const StringDefinition StringDefinitionTwo;
static const StringDefinition StringDefinitionThree;
public:
std::string ToString() const;
private:
string stringDef;
};
StringDefinition::StringDefinition(const std::string &stringDef)
{
this->stringDef = stringDef;
}
const StringDefinition StringDefinition::StringDefinitionOne("One");
etc...
欢迎所有想法和评论。
编辑:我没有使用字符串文字,因为它不会强制开发人员使用定义列表中的值。即使您希望它们使用字符串文字,它们仍然可以对字符串进行硬编码。如果我正在做一些疯狂的事情,我会喜欢一些建设性的批评,而不仅仅是投票。
答案 0 :(得分:0)
这是个人品味的问题,但如何保持它更简单;类似的东西:
enum class Foo { Ack, Eek };
explicit operator std::string(Foo foo) {
static const char* const names[] = { "Ack", "Eek" };
return names[(int)foo];
}