簡體   English   中英

當對象位於賦值的右側時,重載賦值運算符

[英]Overloading assignment operator when the object is on the right-hand side of the assignment

給出以下代碼:

template <typename T>
struct Wrapper {
    T value;
    Wrapper(T val) : value(val) {}
}

int main() {
    Wrapper<int> x(42);
    int y = x; // need solution for y = x.value
    return 0;
 }

有沒有辦法實現分配

int y = x;

所以它意味着y = x.value。

我知道重載賦值運算符本身是不可能的,因為它適用於賦值左側的對象,而標准不允許帶有兩個參數的friend函數。

如果通過重載任何其他運算符或使用一些特殊技巧無法做到這一點,除非通過調用Wrapper類提供的get方法,除非通過調用Wrapper類提供的get方法,否則將如何實現:

int y = x.get();

為什么不直接向T提供隱式轉換

operator T() { return value; } 

這將導致賦值運行,因為編譯器將嘗試將賦值的右側轉換為T 隱式轉換將允許成功

請注意,除了分配之外,這將導致其他轉換工作。 例如,現在可以將Wrapper<T>實例作為T參數傳遞。 這可能適用於您的特定情況,也可能不適用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM