隐式转换和多态

时间:2016-02-27 03:26:06

标签: c++

非常直截了当的问题,我试图使用多态参数进行隐式转换,有没有办法让它工作?

的main.cpp

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

client.hpp

virtual void send(const request & rq)

nick_request.hpp

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

nickname.hpp

nickname(const std::string & name)

一种解决方案是为每种类型的“请求”写出一个重载,但这很乏味并且会破坏多态性的重点。

1 个答案:

答案 0 :(得分:2)

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

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

LIVE

请参阅user-defined conversion