[英]Implicit conversion between 3rd party types
有兩個類: A
和B
存在用於從類型A
轉換為類型B
和返回的算法。 我們無法觸及它們的源代碼。 我可以在兩種類型之間編寫隱式轉換嗎?
應該起作用的示例代碼:
B CalculateSomething(double x)
{
A a(x);
a.DoSomethingComplicated();
return a;
}
不,我不這么認為。 隱式轉換通常使用重載運算符進行編碼。 它也適用於基類型。 由於您無法修改A和B代碼,因此無法告訴編譯器如何執行此操作。 您的代碼段會出錯。
你必須進行顯式轉換。 只是
return helper.convertToB(a);
MY2C
不,但你可以寫一個命名的自由函數來做到這一點。
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 );
}
這可能比隱式轉換更清晰。
有兩個類:A和B.有從A類轉換為B類和返回類的算法。 我們無法觸及它們的源代碼。 我可以在兩種類型之間編寫隱式轉換嗎?
不,如果A
和B
不相關,你就不能。 (而且我很感激。隱式轉換帶來了足夠的麻煩,因為它們無法為第三方類創建它們。)
不改變類定義是不可能的
即使你不能改變A或B的實現,你也可以在B的定義中添加一個內聯構造函數,它帶有一個const A&。
但我懷疑,除非這些類真的密切相關,否則提供一個顯式轉換函數會更好 - 隱式轉換可能是難以發現的錯誤的巨大來源:
B CalculateSomething(double x)
{
A a(x);
a.DoSomethingComplicated();
return ConvertAToB( a );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.