如何在C ++中创建一个类型安全的字符串“定义”对象?

时间:2017-01-31 20:40:52

标签: c++ string enums

我喜欢使用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...

欢迎所有想法和评论。

编辑:我没有使用字符串文字,因为它不会强制开发人员使用定义列表中的值。即使您希望它们使用字符串文字,它们仍然可以对字符串进行硬编码。如果我正在做一些疯狂的事情,我会喜欢一些建设性的批评,而不仅仅是投票。

1 个答案:

答案 0 :(得分:0)

这是个人品味的问题,但如何保持它更简单;类似的东西:

enum class Foo { Ack, Eek };

explicit operator std::string(Foo foo) {
    static const char* const names[] = { "Ack", "Eek" };
    return names[(int)foo];
}