C++自动转换

ano*_*non 7 c++

对于两个不相关的类"A类"和"B类"和一个函数

B convert(const A&);
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉C++自动,对于任何以"B类"作为参数的函数,自动转换"A类".

谢谢!

GMa*_*ckG 10

在这种情况下你通常会做的是给B一个构造函数,它接受A:

class B
{
public:
    B(const A&);
};
Run Code Online (Sandbox Code Playgroud)

并在那里进行转换.编译器会说"我怎么能做A一个B?哦,我看到B可以构造一个A".

另一种方法是使用转换运算符:

class A
{
public:
    operator B(void) const; 
}
Run Code Online (Sandbox Code Playgroud)

编译器会说:"我怎样才能让A一个B?哦,我看A可以转换为B".

请记住,这些很容易被滥用.确保这两种类型隐式转换为彼此确实有意义.

  • 我是关于隐式转换运算符的警告.在过去的十年中,每当我想要引入这样的东西时(除了我曾经写过的字符串类)之外,它迟早会在没人预料到并因此被从代码中删除时开始 - 通常付出了相当大的代价.还要记住,编译器将始终只调用_one_用户定义的转换.因此,如果还存在从"B"到"C"的用户定义转换,则不能使用"A"调用`void f(C)`,因为这需要两次转换. (3认同)