作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 C++ 中使用 std::map 时,是否可以将继承的类作为它们的“基类”存储在映射中并且仍然能够调用它们的重载方法?看这个例子:
#include <iostream>
#include <map>
class Base
{
public:
virtual void Foo() { std::cout << "1"; }
};
class Child : public Base
{
public:
void Foo() { std::cout << "2"; }
};
int main (int argc, char * const argv[])
{
std::map<std:string, Base> Storage;
Storage["rawr"]=Child();
Storage["rawr"].Foo();
return 0;
}
以下代码写入“1”。这不知何故告诉我,当您使用 std::map 时,多态性不起作用。
最佳答案
多态性在这种情况下不起作用,因为 std::map 将 Base 存储为值类型,所以 objects get sliced .
如果你想对存储的对象进行多态性,你需要存储指针或使用 boost ptr containers 之一效果相同。这意味着您需要记住之后删除内存(请不要将指向堆栈对象的指针放入映射中)
关于c++ - std::map 无法处理多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/833258/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!