不用继承的方式,如何使用这个方法

不用继承的方式,怎么使用这个方法。
不用继承的方式

void fun(A &)

B b;
fun(b);

定义方法时参数是个类A,调用方法时怎么传一个类B的实例。

不用继承的方式
------解决思路----------------------
模板,或者重载?
------解决思路----------------------
fun(*((A*)&b));

这样就能传了,但会有什么问题就不知道了
------解决思路----------------------
给A类增加一个只有一个参数类型为B&的构造函数,就可以调了。
就好像函数参数为const string&,但是你也可以传char*给它一样。因为它知道char*可以构造出一个string
------解决思路----------------------
3L方法可行,类型强制转换毕竟只是欺骗编译器,存在问题的可能性太大了
------解决思路----------------------
重载B类的&方法,返回A&
------解决思路----------------------
引用:
给A类增加一个只有一个参数类型为B&的构造函数,就可以调了。
就好像函数参数为const string&,但是你也可以传char*给它一样。因为它知道char*可以构造出一个string

我觉得不可行,形参是非const引用,实参必须是左值。如果形参是const string&还行,如果形参数string& ,你传递个char*试试。
------解决思路----------------------
引用:
Quote: 引用:

给A类增加一个只有一个参数类型为B&的构造函数,就可以调了。
就好像函数参数为const string&,但是你也可以传char*给它一样。因为它知道char*可以构造出一个string

我觉得不可行,形参是非const引用,实参必须是左值。如果形参是const string&还行,如果形参数string& ,你传递个char*试试。

那就这么调用:
fun(A(b));

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

给A类增加一个只有一个参数类型为B&的构造函数,就可以调了。
就好像函数参数为const string&,但是你也可以传char*给它一样。因为它知道char*可以构造出一个string

我觉得不可行,形参是非const引用,实参必须是左值。如果形参是const string&还行,如果形参数string& ,你传递个char*试试。

那就这么调用:
fun(A(b));

没试,我认为依旧不可行。A(b)产生一个匿名的临时对象,依旧不是左值,语法上就编译不过。再说就算能编译过,形参是引用,意味着可以修改实参,去修改一个匿名的临时变量有意义吗?语法语义上都不行。