有两个类:A
和B
。有一些算法可以从类型A
转换为类型B
并返回。我们无法触及它们的源代码。我可以在两种类型之间编写隐式转换吗?
应该有效的示例代码:
B CalculateSomething(double x)
{
A a(x);
a.DoSomethingComplicated();
return a;
}
答案 0 :(得分:2)
不,我不这么认为。隐式转换通常使用重载运算符进行编码。它也适用于基类型。由于您无法修改A和B代码,因此无法告诉编译器如何执行此操作。您的代码段会出错。
您必须进行显式转换。只是
return helper.convertToB(a);
MY2C
答案 1 :(得分:2)
不,但您可以编写一个命名的自由函数来执行此操作。
B ToB( const A & a ) {
B b;
// process a somehow to add its data to b
return b;
}
然后您的代码变为:
B CalculateSomething(double x)
{
A a(x);
a.DoSomethingComplicated();
return ToB( a );
}
可以说比隐式转换更清晰。
答案 2 :(得分:0)
有两个类:A和B.有从A类转换为B类和返回类的算法。我们无法触及它们的源代码。我可以在两种类型之间编写隐式转换吗?
不,如果A
和B
不相关,则不能。 (我很感激。隐含的转换让人头疼,因为他们无法为第三方课程创建它们。)
答案 3 :(得分:0)
不改变类定义
是不可能的答案 4 :(得分:0)
即使你不能改变A或B的实现,你也可以在B的定义中添加一个内联构造函数,它带有一个const A&。
我怀疑,除非这些类真的密切相关,否则最好提供一个显式转换函数 - 隐式转换可能是难以发现的错误的巨大来源:
B CalculateSomething(double x)
{
A a(x);
a.DoSomethingComplicated();
return ConvertAToB( a );
}