3

新的 C++ 程序员在这里。

我有以下地图定义:

typedef std::map<std::string, Option> MapType;
MapType my_map

Option 是我创建的一个独特的类。我从来没有真正将 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;

买我不知道如何进行动态转换,也不知道如何将指向类的指针添加到地图中。

4

1 回答 1

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

于 2011-10-06T02:23:14.330 回答