第三方类型之间的隐式转换

时间:2010-03-11 10:14:29

标签: c++ type-conversion

有两个类:AB。有一些算法可以从类型A转换为类型B并返回。我们无法触及它们的源代码。我可以在两种类型之间编写隐式转换吗?

应该有效的示例代码:

B CalculateSomething(double x)
{
    A a(x);
    a.DoSomethingComplicated();
    return a;
}

5 个答案:

答案 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类和返回类的算法。我们无法触及它们的源代码。我可以在两种类型之间编写隐式转换吗?

不,如果AB不相关,则不能。 (我很感激。隐含的转换让人头疼,因为他们无法为第三方课程创建它们。)

答案 3 :(得分:0)

不改变类定义

是不可能的

答案 4 :(得分:0)

即使你不能改变A或B的实现,你也可以在B的定义中添加一个内联构造函数,它带有一个const A&。

我怀疑,除非这些类真的密切相关,否则最好提供一个显式转换函数 - 隐式转换可能是难以发现的错误的巨大来源:

B CalculateSomething(double x)
{
    A a(x);
    a.DoSomethingComplicated();
    return ConvertAToB( a );
}