не вызывается operator ==
hi!
есть некая чудо-обертка для вектора
class CVector3 {
public :
...
inline operator double * () { return v; } //(*)
inline bool operator == (const CVector3& rhs) { return false ; } //(**)
...
double v[3];
};
если написать код
CVector3 v1, v2;
...
if ( v1 == v2 ) (***)
...
то в (***) вызывается (*), а не (**)
как с этим борятся?
Re: не вызывается operator ==
От:
Vamp
Дата: 17.07.08 15:41
Оценка:
RTT>как с этим борятся?
Делают отдельно стоящий (дружественный) оператор == вместо члена класса.
Да здравствует мыло душистое и веревка пушистая.
Re: не вызывается operator ==
От:
Smal
Дата: 17.07.08 15:54
Оценка:
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>hi!
RTT>есть некая чудо-обертка для вектора
RTT>RTT>class CVector3 {
RTT>public :
RTT>...
RTT> inline operator double * () { return v; } //(*)
RTT> inline bool operator == (const CVector3& rhs) const { return false ; } //(**)
RTT>...
RTT> double v[3];
RTT>};
RTT>
RTT>если написать код
RTT>RTT> CVector3 v1, v2;
RTT> ...
RTT> if ( v1 == v2 ) (***)
RTT> ...
RTT>
RTT>то в (***) вызывается (*), а не (**)
RTT>как с этим борятся?
#include <iostream>
class CVector3 {
public :
inline operator double * () { std::cout << "1" ; return v; } //(*)
inline bool operator == (const CVector3& rhs) const { std::cout << "2" ; return false ; } //(**)
double v[3];
};
int main()
{
CVector3 v1, v2;
v1 == v2;
}
G++ 3.4.5, VS 2003 SP1, VS 2005 выдают 2.
Какой компилятор?
ЗЫ. Вы забыли объявить для оператора == модификатор const, но это не влияет на результат.
С уважением, Александр
Re: не вызывается operator ==
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>то в (***) вызывается (*), а не (**)
Этого не может быть!
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Re[2]: не вызывается operator ==
R>Этого не может быть!
Верный ответ!
Прошу прощения — вечер уже, мозги кипят — косячу (надо было Rebuild сделать)
Re: не вызывается operator ==
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>как с этим борятся?
Не пишут без повода неявных преобразований.
Re[2]: не вызывается operator ==
От:
hobby
Дата: 21.07.08 07:51
Оценка:
-1
Здравствуйте, Centaur, Вы писали:
C>Не пишут без повода неявных преобразований.
Уверяю тебя -- повод есть.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить