2012-07-15 76 views
1

我需要在C++中構建一個異構類型的數組。 該數組是在編譯時構造的,但其構造分散在不同的編譯單元(即不同的源文件)中。 該數組應該很容易擴展爲包含新類型作爲應用程序進度的編程。 運行時應該訪問結果數組。C++不同類型的數組

這可能嗎?

我鑽了一點點進入boost mpl和boost融合,但沒有找到答案。

感謝

+0

如果你已經在使用Boost,爲什麼不'std :: vector '? – kennytm 2012-07-15 06:57:25

+1

若要將不同類型放在數組中,如果它們具有公共基類,請將unique_ptr用於基類。否則,把它們放在一個數組中是沒有意義的。你會想要一個結構或元組。 – 2012-07-15 07:00:54

回答

3

陣列是在編譯時構造,然而,它的結構 分散在不同的編譯單元

這是不可能的。翻譯單位不知道其他翻譯單位。由於除TU之外沒有任何東西可以協調任何事情。

假設您想要在foo.cpp中填充數組,請添加Foo類型的對象。應該放置哪個索引?這是不可能確定的,因爲不知道哪些其他指標存在。

鏈接器知道所有的TU。唉,鏈接器仍然很愚蠢,無法在鏈接時運行用戶代碼。如果鏈接器有點聰明,它可以爲你的TU做類似myarray.push_back(Foo())的操作。但它不能。

當然你仍然可以在運行時做push_back

也許如果你描述你的真實問題,集體將能夠找到解決方案。