当前位置: 首页 > 知识库问答 >
问题:

如何在C中创建类型安全的字符串“定义”对象?[副本]

江渊
2023-03-14

我喜欢使用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个答案

边浩波
2023-03-14

这是个人品味的问题,但如何让它更简单一点;大致如下:

enum class Foo { Ack, Eek };

explicit operator std::string(Foo foo) {
    static const char* const names[] = { "Ack", "Eek" };
    return names[(int)foo];
}
 类似资料:
  • 问题内容: 考虑此类: 默认的字符串表示形式如下所示: 如何使它显示自定义字符串? 问题答案: 在类的元类中实现或。 使用,如果你说的是可读的字串,使用了明确的表示。

  • 主要内容:类的定义,创建对象,访问类的成员,使用对象指针,总结类和对象是 C++ 的重要特性,它们使得 C++ 成为面向对象的编程语言,可以用来开发中大型项目,本节重点讲解类和对象的语法,如果你对它们的概念还不了解,请先阅读《 C++类和对象到底是什么意思》。 类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体 实例(Instance),拥有类的成员变量和成员函数。 有些教程将类的

  • 问题内容: 看来在PHP对象中是通过引用传递的。甚至赋值运算符似乎也没有创建对象的副本。 这是一个简单的人为证明: 在这两种印刷情况下,我都会得到“之后”的印象 那么,如何通过值而不是通过引用将 $ a 传递给 set_b() ? 问题答案: 在PHP 5+中,对象是通过引用传递的。在PHP 4中,它们是按值传递的(这就是为什么它具有运行时按引用传递(已弃用)的原因)。 您可以在PHP5中使用“克

  • 问题内容: 这个问题已经被问过了,但是我想API改变了,答案不再有效。 无法完成,因为TopLevelWindow受保护,并且诸如扩展/实现窗口之类的事情很荒唐:) 有人知道该怎么做吗?在我看来,这很难做到。 问题答案: 该代码在GroovyConsole中有效

  • 问题内容: 通过下面的代码运行时,我得到一个。 我该如何解决? 问题答案: 您为月份使用了错误的日期格式,也应使用与日期中相同的定界符。 如果日期字符串的格式 对模式使用相同的定界符 如果您的日期字符串的格式 在模式中使用相同的定界符“-” 应该 从 SimpleDateFormat文档 MM —>一年中的一个月 毫米->分钟