映射和多态性

Maps and polymorphism

本文关键字:多态性 映射      更新时间:2023-10-16

我有一个base class Adapterextends两个类Device1Device2。我想将两种类型的对象存储在同一个地图中,所以我尝试了这个

std::map<std::string, Adapter*> deviceMap;
bool Circuit::add(Adapter *wrapper, std::string &name)
{
    if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)
        return false;
    return true;
}

我在哪里像这样使用这个函数

Circuit circ;
circ.add(new Device1(*param*), "dv1");

但是我收到一条错误消息,说

main.cpp:13: error: no matching function for call to 'Circuit::add(Device1*, const char [4])'
     circ.add(new Device1(*param*), "dv1");
                                                ^

我做错了什么?

circ.add(new Device1(*param*), "dv1");

尝试将非常量引用绑定到临时引用。尝试

bool Circuit::add(Adapter *wrapper, const std::string& name)

另一个小问题在生产线上

if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)

其中使用&wrapper而不是wrapper(wrapper已经是一个地址(。