我正在實現一個C++程序,該程序可以編程實例化給定輸入文件的對象,該輸入文件提供要傳遞給構造函數的類名稱和參數。具有異構構造函數約束的C++工廠模式
這些類是從一個公共基類派生的,但它們的構造函數簽名有所不同。
它們的聲明如下:
class Base { ... }
class Class1 : Base { Class1(int a1, int a2); }
class Class2 : Base { Class2(int a1, int a2, int a3); }
... and so on...
的參數類型沒有爲int的,事實上,他們可以是任何內置類型或複雜的自定義類型。
程序輸入可能看起來像這樣以JSON形式:
[
{ "Class1": ["arg11", "arg12"] },
{ "Class2": ["arg21", "arg22", "arg23"] },
...and so on...
]
閱讀過的文檔進行Boost.Functional/Factory看來,它可以解決我的問題,如果不是事實,我的應用程序構造函數簽名的變化(異質性約束)。 Boost.Function/Factory的方法是規範化構造函數簽名,但這在我的應用程序中是不可行的。
在像Python這樣的動態語言中,這將是相當平凡的:obj = klass(*args)
其中klass = Class1
和args = ["arg11, "arg12"]
。
那麼如何實現工廠模式與C++中的異構約束呢?
除了Boost以外,還有其他的庫,我忽略了這可能是有幫助的嗎?
是否有可能實現這樣的唯一依賴項是標準庫(即不提升)?
此外,在構造函數參數是複雜類型的情況下,它必須從其JSON表示特別構造,它是如何影響問題的複雜性的?
供將來參考,均勻的相對是異質 –
嘿塞特, 「不均勻」也根據韋氏字典一個有效字,並且在意義「不同」的相似。 我選擇了前者,因爲這也是Boost.Function/Factory文檔的選擇(請參閱我的文章中的鏈接)。 –
是的,我知道,你可以添加「in」或「un」幾乎任何單詞,它仍然是一個單詞。這聽起來很奇怪。 –