函數應該接受一個類的名稱並返回該類型的對象。如何在C++中做到這一點?C++;如何將一個字符串(類的名稱)變成一個類型?
2
A
回答
7
這就是所謂的反射,不是C++語言的一部分。可以用通常稱爲工廠模式的東西來實現。它的工作方式是,對於您想要創建的每種類型,都可以在可以創建此類型的對象的函數與其名稱之間創建映射。
這種映射可能像std::map
那樣簡單,其中鍵是類的名稱,值是指向返回類的新實例的函數的函數指針。
0
你將不得不依賴引入反射對象的框架,比如Qt元對象系統,或者編寫你自己的對象。
但是,這不是真實的反射,只能用於手動幫助,無論是以需要調用工具的形式,還是以必須將可實例化類註冊到框架的形式。
2
根據您的問題的確切要求,您可能會詢問有關反思(在最常見的情況下),該語言不是本機支持的,但您可能會找到某些庫或某種形式的工廠模式,您可以在其中創建一個接收一組參數並返回相應類型對象的函數。第二種情況是一種更爲有限的情況,其中類型必須相關,並且必須實施工廠...
因此,您可以根據您的特定要求擴展問題嗎??
相關問題
- 1. 演員從類型名稱爲一個字符串類型
- 2. C#在一個字符串類型
- 3. 如何將一個POINTER(c_char)類型的變體賦值給一個字符串?
- 4. C#創建一個名稱爲動態字符串的類
- 5. 如何用字符串的名稱創建一個類方法?
- 6. 如何將一個類型記錄爲一個名稱?
- 7. 如何將一組字符串聲明爲一個類型?
- 8. 如何給一個類引用一個可引用的字符串名稱?
- 9. 將不同數據類型的幾個變量組合成一個字符串
- 10. 包括字符串,字符串不會命名一個類型
- 11. c#中的類 - 創建一個包含類的實例名稱的字符串
- 12. 將字符串轉換爲另一個變量的類型
- 13. '字符串'不會命名一個類型 - C++錯誤
- 14. 解析來自一個字符串類型名複用C#
- 15. 如何將一個AppleScript列表變成一個字符串
- 16. Java:如何獲得一個字符(或其類型分類)的Unicode名稱?
- 17. C# - 如何根據字符串返回一個類型
- 18. 如何寫一個泛型類型的擴展方法,其中一個類型變量必須是字符串?
- 19. 如何同時將多個名稱分配給一個C#類
- 20. 將字符串轉換爲類型,其中類型是一個變量
- 21. 如何將模板化的類型名稱作爲字符串?
- 22. 如何從一個類獲取字符串到另一個類?
- 23. 類型從一個字符串數組
- 24. 如何將一個字符串分成兩種不同的類型?
- 25. 如何獲得一個變量的值在一個字符串中的名稱?
- 26. 如何從類型名稱和程序集名稱中加載一個類型
- 27. Java,將字符串從一個類傳遞到另一個類
- 28. 將字符串從一個類傳遞到另一個類
- 29. Haxe - 從字符串名稱中創建一個類的實例
- 30. 如何聲明一個變量類型知道它的類型由一個字符串
我認爲總稱是內省。 –
@Preet:正如術語所言,來自拉丁文的intro_spection_只會成爲關於_observing_的反射部分。 –
+1哇 - 很好的反擊! –