與其他用戶一樣,我試圖實現不可能或非常複雜的事情。我讀了很多問題,比如「遍歷所有派生類」,但正如我所見,這是不可能的。但我想問的是可以自動註冊派生類。也許使用一些模板。或者,例如使用帶有特殊名稱的模板函數(例如template<typename T> void register(SomeFabric* f, T* t = new T())
)並遍歷所有'註冊'類型(如果可能的話)。或者使用另一個特殊函數(例如void register(SomeFabric* f, Base* base)
)並遍歷所有可用類,如果可以使用此參數調用此特殊函數,並且可以實例化可迭代類 - 請調用它。 如果完全不可能:註冊類最簡單(開發者操作的最低數量)方式是什麼?使用C++自動註冊派生類11
0
A
回答
0
最簡單的解決辦法是保持在基類的靜態字段派生類的列表:
static vector<*BaseClass> children;
然後寄存器新的BaseClass的構造函數實例:
children.push_back(this)
而且刪除來自基類析構函數中的註冊表。
不要從派生類忘記調用父類的構造:
Derived(int a, int b) : BaseClass() {...}
注意,雖然這種解決方案將工作,它是差但從架構的角度。它介紹了全球的狀態以及與之相關的所有問題。
相關問題
- 1. 自動使用派生類
- 2. C#make類自動註冊
- 3. 自動將C++ 11自動關鍵字重寫爲派生類型
- 4. C++使用派生類
- 5. 從派生自同一類的類派生的C++子類
- 6. 統一自動註冊類
- 7. C++派生類
- 8. C++派生類
- 9. C++:調用派生類
- 10. 使用Boost序列化註冊用戶提供的派生類型
- 11. C#。我可以自動替換派生類而不是基類
- 12. C++派生自本機類型
- 13. 如何自動派生DataKinds派生類型的Typeable實例?
- 14. 派生自抽象類,僅引用派生類
- 15. 在中央列表中註冊派生類
- 16. 使用在基類派生類,而派生類的基類
- 17. C++ - 派生類到基類
- 18. 將shared_ptr向下轉換爲包含weak_ptr C++的派生類11
- 19. C++ 11基本構造委託/轉發到派生類與「使用」關鍵字
- 20. 派生自動類裝飾(或驗證)
- 21. 使用Unity,如何使用通用接口自動註冊泛型類,而無需註冊每種類型
- 22. C++和Lua:自動註冊功能
- 23. StructureMap自動註冊後代類
- 24. 非託管C++在生成或不生成COM時使用自動註冊來調用C#dll?
- 25. C++:構造派生類時自動運行函數
- 26. 使用聲明(派生類)
- 27. 通過使用派生類
- 28. 使用JNI派生類型
- 29. 使用在派生類
- 30. Kryo會自動註冊字段中使用的類嗎?
您似乎想要自我註冊抽象工廠。像這裏描述的那樣:http://www.dorodnic.com/blog/2014/03/29/abstract-factory/ – Baldrick
@Baldrick葉,這是我想要的。 Thankyou爲鏈接。這非常有用。如果沒有人會提供更有用的東西,我想我會請你寫回答。 – Megaxela
您正在討論解決某些問題的方法。該解決方案與「迭代所有派生類」或「註冊派生類」有關。首先,這意味着什麼*不清楚*(你的意思是實例嗎?類?你想要在註冊表中重複使用哪些類?),並且計算出你想要的功能是不可能的,因爲你不需要提到這個「解決方案」試圖解決的根本問題。請澄清潛在的問題。通過迭代派生類來明確你的意思,並給出具體的程序行爲例子。 – Yakk