[英]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)
。
a
是Holder
類型,沒有名為operator<
的函數。
對成員函數的函數調用不會觸發從Holder
到Complex
的隱式轉換。
如果你投a
到const Complex&
手動你的函數將工作:
assert(((const Complex&)a) < b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.