【问题标题】:C++, pattern to initialize classesC++,初始化类的模式
【发布时间】:2016-10-20 17:54:19
【问题描述】:

在我的代码中,我实现了许多不同的类,一旦程序的进程被激活,就需要对其进行初始化。

我目前正在手动启动每个类,但是它们太多了,我认为我可以从某个类继承,并且创建的每个对象都将保存在一个向量中,并且可以从创建的对象(基类)中初始化该类,但是我只需要初始化一次类,即使我可以为此设置一个标志,我认为它不是一个好的解决方案。

我认为的其他解决方案是在我必须初始化的每个类(静态变量)上实现一种初始化程序,相同的实现,将每个类的初始化对象保存在向量中,然后从初始化程序类初始化所有类,但我必须向该对象传递很多参数甚至函数。 所以是一个很好的解决方案,但一个糟糕的实施,这样想。

那么你知道初始化类的一些好的模式吗?

编辑:示例:

使用 Android 和 OpenGL,每次应用程序不是 OnResume() 时,Opengl 上下文都会被破坏,并且 OnResume() 上下文会重新创建,对于我需要渲染的任何对象,我都有一个类,例如'绘制正方形的 Square 类,并且对于每个正方形对象,我在“Square 类”中有静态变量,每个正方形都可以使用 opengl 正确呈现,例如缓冲区或着色器等,因此无论何时重新创建上下文,我需要重新初始化类静态变量才能呈现对象。

【问题讨论】:

  • 我很难理解你的意思。归根结底,类的唯一有用对象是那些您最终在代码中使用(并因此键入)的对象。那为什么不手动初始化对象呢?
  • @space_voyager 我在 EDIT 上放了一个例子

标签: c++ design-patterns initialization


【解决方案1】:

C++ 中的一种标准初始化模式是漂亮的计数器模式。见http://www.petebecker.com/js/js199905.html。总而言之,在你的头文件中,你定义了一个带有构造函数的对象,所以这个构造函数将为每个包含头文件的 .cpp 执行一次。此构造函数递增一个全局共享计数器。如果计数器从 0 变为 1,则运行初始化代码。同样,析构函数会递减计数器,并在计数器从 1 变为 0 时取消初始化或销毁。

这适用于唯一的 C++ 关于初始化顺序的保证,即,在同一个文件中,对象是从上到下构造和初始化的。如果人们有多个通过头文件相互引用的 .cpps,则初始化的第一件事将在一个头文件中定义,该头文件不包含需要首先初始化的任何其他内容,这应该是不依赖于其他任何内容的内容。

【讨论】:

    【解决方案2】:

    也许我完全弄错了,但至少在 Java 世界中,解决这个问题的一种方法是通过 frameworks 使用 依赖注入 来处理 初始化你的对象,基于你必须提供的配置信息

    含义:您将实际的“业务逻辑”与“建立所有必需的对象”的任务完全分开。您不再在代码中执行“新”操作;所有重要的对象都是“通过魔法”为您创建的。

    这种 C++ 框架的一个例子是 fruit,它实际上是受到 Google 为 java 开发的 guice 的启发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多