C ++映射唯一类并从值中提取子类

时间:2011-10-06 01:15:51

标签: c++ map dynamic-cast

这里有新的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;

买我无法弄清楚如何进行动态投射,也不知道如何将指针添加到地图中。

1 个答案:

答案 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可能对此有所帮助。