在我的代码中,我正在实现许多不同的类,一旦程序的进程被激活就需要初始化。
我目前正在手动启动每个类,但它们是如此之多,我认为我可以从某个类继承,并且创建的每个对象都将保存在向量中,并且可以从创建的对象(基类)初始化类,但我只需要将课程初学一次,即使我可以为此设置一个标志,我也不认为这是一个很好的解决方案。
我认为的其他解决方案是在每个类(静态变量)上实现一种初始化程序,我必须初始化,相同的实现,在向量中保存每个类的init对象,然后从初始化程序类初始化所有类,但我必须向该对象传递许多参数甚至函数。 所以这是一个很好的解决方案,但执行不好,请这么认为。
所以你知道一些好的模式来初始化类吗?
编辑:示例:
使用Android和OpenGL,每次应用程序不是OnResume()时,Opengl上下文被破坏,OnResume()重新创建上下文,对于我需要渲染的任何对象,我有一个类,例如' Square类'绘制正方形,对于每个正方形对象,我在'Square类'中有静态变量,每个正方形都可以使用opengl正确呈现,比如缓冲区或着色器等,所以每次重新创建上下文时,我需要重新初始化类静态变量,以便呈现对象。
答案 0 :(得分:1)
C ++中初始化的一个标准模式是漂亮的计数器模式。见http://www.petebecker.com/js/js199905.html。总而言之,在头文件中,您使用构造函数定义了一个对象,因此对于包含头文件的每个.cpp,此构造函数将执行一次。此构造函数递增全局共享计数器。如果计数器从0变为1,则运行初始化代码。类似地,析构函数递减计数器,并在从1变为0时去除或破坏它们。
这适用于关于初始化顺序的唯一C ++保证,即,在同一文件中,对象是从上到下构造和初始化的。如果人们有多个.cpps通过头文件相互引用,那么初始化的第一件事将在一个头文件中定义,该头文件不包含任何其他需要首先初始化的内容,这应该是不依赖于任何其他内容的东西。
答案 1 :(得分:1)
Maybe I get this totally wrong, but at least in the Java world, one way of solving this topic is by using dependency injection via frameworks that take care of init'ting your objects, based on configuration information that you have to provide.
Meaning: you completely separate your actual "business logic" and the task of "establishing all the required objects". You don't do "new" any more in your code; all the important objects are created for you "by magic".
One example of such a framework for C++ would be fruit, which is actually inspired by Google's guice thing for java.