![]() |
1
169
要获得静态构造函数的等价物,需要编写一个单独的普通类来保存静态数据,然后生成该普通类的静态实例。
|
![]() |
2
73
好吧,你可以
不要忘记(在.cpp中)这个:
程序仍将在没有第二行的情况下链接,但不会执行初始值设定项。 |
![]() |
3
19
在.h文件中:
在.cpp文件中:
|
![]() |
4
15
C++ 11解决方案由于C++ 11,你可以使用 lambda expressions 到 直接地 初始化静态类成员。你不需要再使用任何解决方法了。 头文件:
源文件:
这个图案是 完全替换 对于静态构造函数:
|
![]() |
5
14
这是另一个类似于丹尼尔·埃尔威克的方法,也使用了康拉德·鲁道夫的朋友级建议。这里我们使用一个内部的私有友元实用程序类来初始化主类的静态成员。例如: 头文件:
实施文件:
这种方法的优点是完全隐藏初始值设定项类,使类中包含的所有内容都被初始化。 |
![]() |
6
10
调用方只需向要成为其静态构造函数的函数添加一行。
|
![]() |
7
9
不需要
但是请注意,类类型的静态在库中会造成问题,因此应该避免出现这种情况。 C++ 11更新 至于C++ 11,你可以这样做:
它在语义上等同于原始答案中的C++ 98解决方案,但是你不能在右手边使用字符串文字,所以它不是完全优越的。但是,如果有一个向量不是
|
![]() |
8
6
从C++中的问题中学习了静态构造函数的概念。所以我们没有直接等价物。
最好的解决方案是使用可以显式初始化的pod类型。
|
![]() |
9
4
当试图编译和
使用
班
如果不将某些代码放在类定义(CPP)之外,似乎不可能初始化非整数类型的静态属性。 要进行编译,您可以使用“ 带有静态局部变量的静态方法 “相反。像这样:
您也可以将参数传递给构造函数或用特定的值初始化它,它非常灵活、强大并且易于实现…唯一的事情是你有一个包含静态变量的静态方法,而不是静态属性…语法有点变化,但仍然有用。希望这对某人有用, 雨果·冈兹·莱兹·卡斯特罗。 |
![]() |
10
4
我想解决这个问题的简单方法是:
|
![]() |
11
1
解决了同样的问题。我必须为singleton指定单个静态成员的定义。 但是让事情变得更复杂-我决定我不想调用randclass()的ctor,除非我要使用它…这就是为什么我不想在代码中全局初始化singleton。在我的例子中,我还添加了简单的接口。 以下是最终代码: 我简化了代码并使用rand()函数及其单种子初始化器srand()。
|
![]() |
12
1
这是efraim解决方案的变体;区别在于,由于隐式模板实例化,只有在创建类的实例时才调用静态构造函数,并且
在
在
注意
|
![]() |
13
1
这是另一个方法,其中向量是通过使用匿名名称空间对包含实现的文件私有的。它对于查找表之类的实现私有的东西很有用:
|
![]() |
14
1
它当然不需要像目前公认的答案那样复杂(丹尼尔·厄尔威克)。这个班是多余的。在这种情况下,没有必要进行语言战争。 HPP文件:
CPP文件:
|
![]() |
15
0
定义静态成员变量的方式与定义成员方法的方式类似。 福奥
英尺·CPP
|
![]() |
16
0
要初始化静态变量,只需在源文件内部进行初始化。例如:
|
![]() |
17
0
如何创建一个模板来模仿C的行为?
|
![]() |
18
0
对于像这里这样的简单情况,包装在静态成员函数中的静态变量几乎是一样好的。它很简单,通常会被编译器优化掉。但这并不能解决复杂对象的初始化顺序问题。
|
![]() |
19
0
这是解决方案吗?
|
![]() |
20
0
静态构造函数可以通过以下友元类或嵌套类来模拟。
输出:
|
![]() |
21
0
哇,我不敢相信没有人提到最明显的答案,而且最接近模仿C静态构造函数行为的答案,也就是说,在创建第一个此类对象之前,它不会被调用。
对于额外的学分,将其设置为3向标志而不是布尔值,即不运行、运行和完成运行。然后,该类的所有其他实例都可以旋转锁,直到运行静态构造函数的实例完成为止(即,发出内存边界,然后将状态设置为“完成运行”)。您的自旋锁应该执行处理器的“暂停”指令,将每次的等待时间加倍,直到达到一个阈值,等等——这是相当标准的自旋锁技术。 在没有C++ 11的情况下, this 你应该开始了。 下面是一些指导您的伪代码。将其放入类定义中:
在您的构造函数中:
|