当我尝试将一个unique_ptr插入到我的基类的unordered_map中的一个派生类时,我在Visual Studio 2017中使用resharper得到一个带红色下划线的代码段。我特意说一个带有红色下划线的部分"因为代码仍在编译并且似乎运行,但我担心我做错了。
这是基类。
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_) });
我在某个地方犯了错误吗?我非常感谢你的帮助。