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

戈登·古斯塔夫森

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

我想到,由于变量将是只读的,因此它们只能是公共静态const,因此我可以在类外设置它们,但是再一次,这看起来像是一个丑陋的hack。

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

丹尼尔·艾威克

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

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

};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中的自定义类的构造函数中初始化没有参数的静态const类成员

在 C++ 中初始化模板类私有静态变量

如何在C ++中初始化私有静态成员?

构造函数中私有成员初始化的差异(C++)

从C中的函数初始化静态const变量

模板函数中的C ++静态变量初始化

我如何在C ++中初始化静态指针?

如何在C ++中使用构造函数(只是构造函数)在类中初始化大型私有数组?

C ++-初始化中的静态分配

C ++在构造函数中初始化对象(多态)

C++中构造函数初始化对象的问题

C ++私有结构和非静态const变量初始化

类C ++的静态函数成员中的静态数据成员的初始化顺序

C# 部分类:非静态字段初始化是否在构造函数之前执行?

填充ConcurrentDictionary时的C#静态构造函数初始化线程安全

c++ 中的初始化没有匹配的构造函数错误。我的构造函数有什么问题?

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

使用C ++中的shared_ptr从公共静态成员函数访问私有构造函数

使用私有构造函数进行静态初始化

C ++ 11函数本地静态const对象的线程安全初始化

Lambda(或函数)C ++内部的静态初始化

C函数内部的静态变量初始化

初始化存储 lambda 函数的 C++ 静态成员

另一个类的c ++私有对象:初始化并使用它调用该类中的函数

uninit_member:非静态类成员 m_wszParams 未在此构造函数中初始化,也未在它在 C++ 中调用的任何函数中初始化

在具有私有构造函数的类中初始化静态变量

在Objective-C中初始化和使用线程安全静态对象

c ++对象中静态变量的默认初始化值是什么?

动态加载的库中的静态c ++对象是否在dlopen()返回之前初始化?