我想擁有一個持有類型可以變化的數據成員的類。喜歡的東西:如何創建一個持有類型尚未知道的值的類?
struct container
{
void push(auto x);
private:
auto m_x;
};
凡類型不知道,直到我打電話push()
。我將如何做到這一點?
我想擁有一個持有類型可以變化的數據成員的類。喜歡的東西:如何創建一個持有類型尚未知道的值的類?
struct container
{
void push(auto x);
private:
auto m_x;
};
凡類型不知道,直到我打電話push()
。我將如何做到這一點?
template<typename T>
struct container
{
void push(T x);
private:
T m_x;
};
這個類型在我調用'push
當你調用它的成員函數時,類必須被實例化,所以你在調用'push'之前基本上必須知道'm_x'的類型。 – vsoftco
成員函數可以被模板化。你不必模板整個班級。但是,如果一個類成員依賴於該方法的類型,那麼是的,你必須對整個類進行模板化。 –
你可以嘗試boost::any
,它可以讓你存儲任何類型的,但後來的檢索與利用必須知道實際類型的(它可能會嘗試一個特定的類型,通過潛在的類型列表工作...) 。
如果您可能需要存儲任何類型,但稍後在檢索期間只需要對該值執行某些操作(例如,將該值流式傳輸到std::ostream
,將其添加到另一個值,...),則可以將這些操作捕獲爲函數模板實例化的指針,或者通過實例化一個類模板,其中操作是基類方法的重寫,以便您的容器可以存儲指向基類的指針並使用運行時多態性分派。
在C++中,不可能實現一個保存類型可變的數據成員的類。
根據您的具體需求,以下解決方案接近:
這兩種解決方案都以某種方式失敗;它取決於哪一個更適合的確切問題。
您在問題中標記了模板? –
@本* *可以*使用模板,但我不知道如何。 –
可能有用:http://stackoverflow.com/questions/7804955/heterogeneous-containers-in-c; http://stackoverflow.com/questions/3212058/c-how-to-create-a-heterogeneous-container – Brian