gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:49:49 30 4
gpt4 key购买 nike

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

我有以下 map 定义:

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

Option 是我创建的一个独特的类。我从来没有真正将 Option 类单独添加到我的 map 中。相反,我总是添加一个继承自 Option 的类,例如我有一个名为 IntOption 的类,它存储一个 int 变量(它所做的一切)。

现在我可以通过以下方式将 IntOption 添加到我的 map 中:

    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 映射类型;

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

最佳答案

它不会按照您设置的方式工作。该 map 假设它只包含 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 可能对此有所帮助。

关于C++ 映射唯一类并从值中提取子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669435/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com