2014-05-20 30 views
1

我想擁有一個持有類型可以變化的數據成員的類。喜歡的東西:如何創建一個持有類型尚未知道的值的類?

struct container 
{ 
    void push(auto x); 
private: 
    auto m_x; 
}; 

凡類型不知道,直到我打電話push()。我將如何做到這一點?

+0

您在問題中標記了模板? –

+0

@本* *可以*使用模板,但我不知道如何。 –

+0

可能有用:http://stackoverflow.com/questions/7804955/heterogeneous-containers-in-c; http://stackoverflow.com/questions/3212058/c-how-to-create-a-heterogeneous-container – Brian

回答

4
template<typename T> 
struct container 
{ 
    void push(T x); 
private: 
    T m_x; 
}; 
+1

這個類型在我調用'push ()'之前是未知的。 –

+2

當你調用它的成員函數時,類必須被實例化,所以你在調用'push'之前基本上必須知道'm_x'的類型。 – vsoftco

+0

成員函數可以被模板化。你不必模板整個班級。但是,如果一個類成員依賴於該方法的類型,那麼是的,你必須對整個類進行模板化。 –

1

你可以嘗試boost::any,它可以讓你存儲任何類型的,但後來的檢索與利用必須知道實際類型的(它可能會嘗試一個特定的類型,通過潛在的類型列表工作...) 。

如果您可能需要存儲任何類型,但稍後在檢索期間只需要對該值執行某些操作(例如,將該值流式傳輸到std::ostream,將其添加到另一個值,...),則可以將這些操作捕獲爲函數模板實例化的指針,或者通過實例化一個類模板,其中操作是基類方法的重寫,以便您的容器可以存儲指向基類的指針並使用運行時多態性分派。

1

在C++中,不可能實現一個保存類型可變的數據成員的類。

根據您的具體需求,以下解決方案接近:

  • 實現類模板。實例化類模板以獲得您需要的 類。
  • 使用指針或引用作爲數據成員。

這兩種解決方案都以某種方式失敗;它取決於哪一個更適合的確切問題。

相關問題