簡體   English   中英

在c ++ 11中使用用戶定義的轉換來重載運算符

[英]overloaded operator deduction using user-defined conversions in c++11

我的問題可能與http://en.cppreference.com/w/cpp/language/overload_resolution#Call_to_an_overloaded_operator有關。 但就我而言,我有const復雜類型:

class Complex {
public:
   int data;

   Complex(int i) : data(i) {}
   bool operator < (const Complex& other) const { return data < other.data; }
};
class Holder {
public:
    Complex data;

    Holder(int i) : data(i) {}
    operator const Complex&() const { return data; }
};
//...
Holder a(1), b(2);
assert(a < b); //Error 

g ++ 4.9中的編譯器錯誤: no match for 'operator<' (operand types are 'Holder' and 'Holder')

任何想法者如何解決此問題?

順便說一句。 我需要這種轉換以僅允許強制轉換為const類型。

成員比較運算符不允許在左側進行隱式轉換,您需要使運算符成為非成員函數:

class Complex {
public:
   int data;

   Complex(int i) : data(i) {}
};

bool operator < (const Complex& lhs, const Complex& rhs) 
{ return lhs.data < rhs.data; }

現場演示

a < b等效於a.operator<(b)

aHolder類型,沒有名為operator<的函數。

對成員函數的函數調用不會觸發從HolderComplex的隱式轉換。

如果你投aconst Complex&手動你的函數將工作:

assert(((const Complex&)a) < b);

暫無
暫無

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

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