首頁 >後端開發 >C++ >如何從包含類別名稱的字串實例化 C 物件?

如何從包含類別名稱的字串實例化 C 物件?

Susan Sarandon
Susan Sarandon原創
2024-12-17 19:50:14830瀏覽

How Can I Instantiate C   Objects from Strings Containing Their Class Names?

字串到類別物件實例化:C 中的探索

在C 中,問題出現了:我們可以從包含其對象的字串生成物件嗎?類別名,避免需要詳盡了解衍生類別和 if-else 區塊?與具有反射功能的 C# 不同,C 缺乏對此的內建機制。但是,有一些解決方法可以讓我們實現此功能。

一種方法涉及使用映射進行類型映射。我們建立一個模板函數createInstance來產生對象,以及一個將類別名稱映射到其對應函數指標的map_type映射。這使我們能夠透過簡單地使用類別名稱字串存取映射來獲取新實例。

另一個解決方案是使類別能夠在運行時註冊自己。我們在 BaseFactory 中有一個靜態方法 getMap,它會傳回一個 map_type 指針,該指針在第一次調用時創建,並且永遠不會被刪除。類別可以使用 DerivedRegister 結構來註冊自己,並將其類別名稱作為參數傳遞。這種方法確保新類別自動包含在映射過程中。

對於沒有共用基底類別的不相關類型,我們可以使用 boost::variant 來容納它們的回傳值。 boost::variant 的作用就像一個聯合體,攜帶有關其內部類型的信息。透過利用這個概念,我們可以將類別名稱映射到返回 boost::variant 物件的函數指針,該物件可以保存所需的類型實例。

在 C 中,我們可以選擇使用 Boost.Function 來解耦我們的來自特定函數或類型的程式碼。然後,映射結構將使用將類別名稱映射到 Boost.Function 實例的映射,可以呼叫該實例來建立物件。

這些方法提供了從 C 中類別名稱的字串表示形式動態產生物件的方法。雖然它們需要一些手動配置,但它們提供了靈活性並避免了工廠類別中詳盡的分支邏輯的需要。

以上是如何從包含類別名稱的字串實例化 C 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn