не вызывается operator ==
От: RikkiTikkiTavi Россия  
Дата: 17.07.08 15:36
Оценка:
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 ==
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 17.07.08 16:11
Оценка: :)
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>то в (***) вызывается (*), а не (**)

Этого не может быть!
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Re[2]: не вызывается operator ==
От: RikkiTikkiTavi Россия  
Дата: 17.07.08 16:17
Оценка:
R>Этого не может быть!

Верный ответ!

Прошу прощения — вечер уже, мозги кипят — косячу (надо было Rebuild сделать)
Re: не вызывается operator ==
От: Centaur Россия  
Дата: 17.07.08 17:54
Оценка: 1 (1) +1
Здравствуйте, RikkiTikkiTavi, Вы писали:

RTT>как с этим борятся?


Не пишут без повода неявных преобразований.
Re[2]: не вызывается operator ==
От: hobby  
Дата: 21.07.08 07:51
Оценка: -1
Здравствуйте, Centaur, Вы писали:

C>Не пишут без повода неявных преобразований.


Уверяю тебя -- повод есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.