2012-01-06 75 views
0

我要存儲載體或類似載體這樣的結構不同類型的性病對象::矢量或其它數據結構

template <typename var_type> struct 
    { 
    int some_var; 
    //...some antoher vars 
    var_type problem_var; 
    }; 

,我該怎麼辦呢?我無法使用模板內容創建矢量

+1

「我無法使用模板內容創建矢量」 - 爲什麼不?如果你命名你的結構,會發生什麼,然後寫'std :: vector >'? (用你給你結構體的名稱替換'mystruct',用你想使用的模板參數來'float')。 – 2012-01-06 12:15:10

+0

@SteveJessop:我想他想說的是他想要一個不同種類的容器。 – PlasmaHH 2012-01-06 12:20:42

+2

也許是我,但問題不是非常清楚。你能解釋一下你想達到什麼嗎? – 2012-01-06 12:23:17

回答

1

您可以使用類似Boost.Any之類的東西。

+0

史蒂夫,謝謝,但我不能使用它,因爲可能不僅有浮動 – 2012-01-06 12:17:23

+0

阿爾奇,謝謝,我認爲這是我需要的! – 2012-01-06 12:21:03

0

難道你不能用你需要存儲的對象的類型來創建一個類層次結構,並且在插入到向量中時始終向基類上傳嗎?

缺點是,當你從向量中提取項目或使用基類接口(可能是一個getter方法)時,你總是需要知道什麼類型需要向下轉換。

5

如果您事先知道類型列表,boost::variant<>可能比boost::any更合適。在你的情況下,你可能需要

typedef boost:variant< 
    mystruct<float>, 
    mystruct<int> 
    mystruct<std::string> 
> my_variant; 

這將只允許這3種類型。或者,您可能需要mystruct<boost:variant<float, int, std::string> >,這在表面上相似。我不能從你的問題來判斷哪一個最適合你的問題。