3
這裏是新的C++程序員。C++映射唯一類並從值中提取子類
我有以下的地圖定義:
typedef std::map<std::string, Option> MapType;
MapType my_map
選項是唯一的類我創建。我從來沒有真正將Option類自己添加到我的地圖中。相反,我總是添加一個繼承自Option的類,例如我有一個名爲IntOption的類,它存儲了一個int變量(它的全部變量)。
現在我有沒有問題,增加IntOption到我的地圖做:
IntOption add;
my_map.insert(std::pair<string, IntOption>("a key here", add));
這工作得很好,因爲當我做了
my_map["a key here"]
它會返回值「添加」。
現在我的問題給你所有的好人是如何得到的返回值的子類變量?我可以做以下
my_map["a key here"].getVariableA(); // this is in the base class Option.
,但我不能這樣做
my_map["a key here"].getIntVariable(); //this fails because it doesnt recognize the
//吸氣劑,因爲它不是基類,但類擴展選項。
我該如何解決這個問題?我已經考慮過 typedef std :: map MapType;
買我不知道如何做動態鑄造,也沒有如何將指針添加到類的地圖。
您不能在映射中存儲auto_ptr(它不符合CopyConstructible要求)。 shared_ptr或unique_ptr會很好。 –
問題在於,如果您有多個派生選項類型,dynamic_cast將會失敗(返回null),並且您需要事先知道哪個項目是哪種類型才能成功。 – David
@大衛,這是正確的。我猜這是問題的本質固有的 - 用戶試圖存儲可以是整數,字符串,日期等的選項。它如何使用是一項業務規則。 –