В недрах Qt4 нашёл две непонятные "функции" в классе QUuid:
operator QString() const { return toString(); }
operator GUID() const
{
GUID guid = { data1, data2, data3,
{ data4[0], data4[1], data4[2], data4[3],
data4[4], data4[5], data4[6], data4[7] }
};
return guid;
}
Нашёл!
Форма:
T::operator R();
(R)
Для определенных пользователем преобразований возвращаемый тип задается неявно и совпадает с именем оператора.QUuid::operator QString()
дляQString s;
QUuid q;
s = (QString)q;
QUuid::operator GUID()
дляGUID w;
QUuid q;
w = (GUID)q;
ага.
вот как я потерял день копаясь в чужом исходнике:
if ( count == 0) return;
count - по смыслу простой счётчик, но для удобства автора кода имелась перегрузка изменяющая смысл оператора:bool Foo::operator ==(const Foo &other)
{
bool res = (this->c == other.c);
this->c -= 1;
return res;
}
Нууу, стаким же успехом можно написать и:
#define true false
В таком случае ты можешь еще больше времени потратить.
бить тяжёлым твёрдым предметом по голове, три раза в день до еды.
Я полностью согласен с Саттером и Александреску:
Правило:
При перегрузке операторов сохраняйте их естественную семантику
Исключения:
В предметной области соглашения о семантике операторов могут существенно отличаться от Си++ (например, при работе с регулярными выражениями, где operator* имеет смысл - "ноль и большее количество").
из Правила №26, "Стандарты программирования на С++" Герб Саттер, Андрей Александреску.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)