2016-10-20 53 views
0

在我的代碼中,我實現了許多不同的類,一旦程序的進程被激活,就需要初始化。我目前手動啓動每個類,但它們太多了,我認爲我可以從某個類繼承,並且每個創建的對象都將保存在一個向量中,並且可以創建從創建的對象(基類)創建的類,但我只需要一次就能讓班上課,儘管我可以爲此設置一個標誌,但我不認爲它是一個好的解決方案。C++,初始化類的模式

我認爲的其他解決方案是在每個類(靜態變量)上實現一種初始化方法,我必須初始化相同的實現,將每個類的init對象保存到向量中,然後初始化所有類類,但我必須傳遞給這個對象很多參數,甚至函數。 所以這是一個很好的解決方案,但是一個糟糕的實現,認爲是這樣。

所以你知道一些好的模式來初始化類嗎?

編輯:實施例:

藉助Android和OpenGL中,每個應用程序是不的onResume()的時間,OpenGL上下文被破壞,和的onResume()的上下文中重新創建,並且對於任何對象,我需要渲染,我有一個類,例如'Square class'繪製正方形,並且對於每個Square對象,我在'Square class'中都有靜態變量,每個正方形都可以使用opengl正確渲染,如緩衝區或着色器等,所以任何時候上下文被重新創建,我需要重新初始化類的靜態變量,以便呈現對象。

+2

我很難理解你的意思。在一天結束時,類的唯一有用對象是那些最終在代碼中使用(並因此鍵入)的對象。那時爲什麼不用手來初始化對象呢? –

+0

@space_voyager我在編輯上放了一個例子 – quetzalfir

回答

1

C++初始化的一種標準模式是漂亮計數器模式。見http://www.petebecker.com/js/js199905.html。總之,在你的頭文件中你用一個構造函數定義了一個對象,所以這個構造函數將爲包含頭文件的每個.cpp執行一次。這個構造函數增加一個全局共享計數器。如果計數器從0變爲1,則運行初始化代碼。同樣,析構函數遞減計數器,和去初始化或當它從1到0

這與只有C++保證關於初始化的順序,這是行之有效破壞的東西是,同一文件內,從上到下構建並初始化對象。如果人們擁有多個通過頭文件相互引用的.cpps,則首先被初始化的頭文件將被定義在一個頭文件中,該頭文件不包含任何需要初始化的東西,而這些頭文件不應該依賴於其他東西。

1

也許我得到這個完全錯誤的,但至少在Java世界,解決這一課題的一個方法是通過使用依賴注入通過框架是採取照顧init'ting你的對象的基礎上, 配置信息您必須提供。

含義:您完全分開您的實際「業務邏輯」和「建立所有必需的對象」的任務。你在代碼中不再做「新」;所有重要的對象都是由「魔術師」爲你創造的。

這樣的C++框架的一個例子是fruit,這實際上受谷歌的guice事情的啓發。