我有以下問題需要解決。在編譯時決定構造對象
我有組件A.此組件有一些子組件 - B,C,D。使用cmake我正在構建或不構建B,C,D組件。這取決於當前的平臺配置。我的cmake系統正在生成可執行的makefile(對於A組件),用於僅鏈接那些在給定cmake運行中使用的組件。如果構建組件B,則會將其添加到可執行文件中(如果沒有) - 未鏈接。與其他 - C,D相同。
所有這些B,C,D組件都提供了A組件中使用的接口的一些實現。這個A組件應該管理由B,C,D創建的對象,並在適當的時候使用適當的對象將這些對象保存在某個映射中。
問:
我要實現一些簡單的和可靠的機制,將這些對象自動實現A接口,同樣因爲它現在是帶有鏈接 - 鏈接只是模塊,建成。與這些對象相同 - 我希望只有在編譯時纔將它們註冊到A組件中。
我很難解釋它。這個想法很容易 - 在編譯時建立這些對象的一些映射。只有已編譯的組件才能將其對象傳送到此地圖。
您可以使用makefile/cmake系統設置的預處理器指令來解決此問題。例如,如果編譯組件B並且在編譯A時應該包含組件B,則可以使用指令(如#ifdef COMPILED_B)在必要時在B中包含對B的支持。 – 2013-05-08 13:47:36
是的,這是可能的,但我想在源代碼中避免#ifdef。我只是想知道其他人是如何以更復雜的方式來做這件事的。 – user2301299 2013-05-08 14:29:12