2010-02-07 47 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

您可以提供一個演員操作符或一個參數的構造函數。