&#34;没有可行的功能&#34;尝试将对<string,derived * =“”>插入到unordered_map <string,base * =“”>

时间:2017-03-07 05:21:09

标签: c++ polymorphism unique-ptr

当我尝试将一个unique_ptr插入到我的基类的unordered_map中的一个派生类时,我在Visual Studio 2017中使用resharper得到一个带红色下划线的代码段。我特意说一个带有红色下划线的部分&#34;因为代码仍在编译并且似乎运行,但我担心我做错了。

这是基类。

class irc_message_handler
{
public:
    irc_message_handler::irc_message_handler(user_map& users,
                                             channel_map& channels)
    virtual ~irc_message_handler() = default;
    virtual void handle(const irc_message& message) const = 0;

protected:
    user_map& users_;
    channel_map& channels_;
};

和派生类:

class nick_handler
    : public irc_message_handler
{
public:
    nick_handler(user_map& users, channel_map& channels);
    void handle(const irc_message& message) const override;

private:
    void add_user(std::string nick) const;
    void update_user_nick(std::string nick, user_map::iterator user) const;
};

我正在尝试将派生类的unique_ptr添加到像这样的unordered_map。

using handler_map = std::unordered_map<std::string, std::unique_ptr<irc_message_handler>>;

handler_map handlers_;

// No viable function. Argument types: '<unknown>'
handlers_.insert({ "NICK", std::make_unique<nick_handler>(users_, channels_) });

如果我尝试为基类创建unique_ptr,我不会得到任何红线。

handlers_.insert({ "NICK", std::make_unique<irc_message_handler>(users_, channels_) });

我在某个地方犯了错误吗?我非常感谢你的帮助。

0 个答案:

没有答案