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
@大卫,这是正确的。我猜这是问题的本质固有的 - 用户试图存储可以是整数,字符串,日期等的选项。它如何使用是一项业务规则。 –