C 中的静态构造函数?我需要初始化私有静态对象

新手上路,请多包涵

我想要一个带有私有静态数据成员的类(一个包含所有字符 az 的向量)。在 java 或 C# 中,我可以只创建一个“静态构造函数”,它将在创建类的任何实例之前运行,并设置类的静态数据成员。它只运行一次(因为变量是只读的并且只需要设置一次)并且由于它是类的函数,它可以访问其私有成员。我可以在构造函数中添加代码来检查向量是否已初始化,如果未初始化则对其进行初始化,但这会引入许多必要的检查,并且似乎不是问题的最佳解决方案。

我突然想到,由于变量将是只读的,它们可以只是公共静态常量,所以我可以在类之外设置它们一次,但再一次,它看起来有点像一个丑陋的黑客。

如果我不想在实例构造函数中初始化它们,是否可以在类中拥有私有静态数据成员?

原文由 Gordon Gustafson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

要获得等效的静态构造函数,您需要编写一个单独的普通类来保存静态数据,然后创建该普通类的静态实例。

 class StaticStuff
{
     std::vector<char> letters_;

public:
     StaticStuff()
     {
         for (char c = 'a'; c <= 'z'; c++)
             letters_.push_back(c);
     }

     // provide some way to get at letters_
};

class Elsewhere
{
    static StaticStuff staticStuff; // constructor runs once, single instance

};

原文由 Daniel Earwicker 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题