2010-02-07 45 views
7

对于两个不相关的类“A类”和“B类” 和功能C++自动转换

B convert(const A&); 

是否有办法来自动告诉C++,对于以“B类”的任何功能参数,自动转换“A类”。

谢谢!

+2

如果您无法更改类A或类B的类定义,则没有好的方法来执行此操作。 – Omnifarious 2010-02-07 07:32:10

回答

10

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

class B 
{ 
public: 
    B(const A&); 
}; 

并做转换那里。编译器会说:“我怎样才能让A a B?哦,我看到B可以从A构建”。

另一种方法是使用一个转换操作符:

class A 
{ 
public: 
    operator B(void) const; 
} 

,编译器会说:“我怎样才能让一个AB哦,我明白A可以转换为B?”。

请记住这些很容易被滥用。确保这两种类型隐含地相互转换是有意义的。

+3

我接下来是关于隐式转换运算符的警告。在过去的十年里,每当我试图引入这样的事情(除了我曾经写过的一个字符串类)之外,迟早它会在没有人期待的时候被踢出去,并因此被从代码中移除成本相当高。另请注意,编译器将始终只调用完全_one_用户定义的转换。因此,如果还有从'B'到'C'的用户定义转换,则不能使用'A'调用'void f(C)',因为这需要两次转换。 – sbi 2010-02-07 09:26:34

1

您可以提供一个演员操作符或一个参数的构造函数。