这里有新的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"]
它将返回值“add”。
现在我向大家提出的问题是,如何从返回值中获取子类变量?我可以做以下
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
// getter,因为它不在基类中,而是扩展Option的类。
如何解决此问题?
我考虑过了 typedef std :: map MapType;
买我无法弄清楚如何进行动态投射,也不知道如何将指针添加到地图中。
答案 0 :(得分:2)
它将无法按照您设置的方式运行。该映射假设它只保存Option的实例,因此它将丢弃您尝试发送它的任何IntOption数据。你将不得不回到指向选项的指针。
typedef std::map<std::string, Option*> MapType;
my_map["a key here"] = new IntOption();
IntOption *opt = dynamic_cast<IntOption*>( my_map["a key here"]);
请注意,您现在必须处理内存管理,并决定何时取消分配您的选项。 std :: auto_ptr可能对此有所帮助。