隐式转换和多态性

implicit conversions and polymorphism

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

非常简单的问题,我正在尝试使用多态参数进行隐式转换,有什么方法可以让它工作吗?

主.cpp

nickname nick("somenick");
client.send(nick_request(nick)); // original
client.send(nick); // Implicit conversion from nickname to nick_request

客户端.hpp

virtual void send(const request & rq)

nick_request.hpp

class nick_request : public request
{
    nick_request(const nickname & nick);
    ...
};

昵称.hpp

nickname(const std::string & name)

一种解决方案是为每种类型的"请求"写出重载,但这很乏味,并且违背了多态性的重点。

您可以在nickname中编写一个转换函数(从nicknamenick_request)。

class nickname {
public:
    nickname(const std::string & name) {}
    operator nick_request() const { return nick_request(*this); }
};

查看用户定义的转换