Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 隐式转换与多态性_C++ - Fatal编程技术网

C++ 隐式转换与多态性

C++ 隐式转换与多态性,c++,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) n

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

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);
    ...
};
昵称.hpp

nickname(const std::string & name)

一种解决方案是为每种类型的“请求”编写一个重载,但这很繁琐,而且不符合多态性的要点。

您可以在
昵称中编写一个转换函数(从
昵称
尼克请求

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


太棒了,我不知道这能做到@FranciscoAguilera它使编译器能够找到转换路径。你能解释一下这将如何处理多个参数吗?例如,如果nick_请求包含多个参数?@FranciscoAguilera如下
返回nick_请求(*this,xxx,yyy,zzz)?正确,其中xxx、yyy、zzz是与昵称(username、usermodes)类似的其他类。。。