Re: Function overloading
От: Greg Zubankov СССР  
Дата: 19.12.05 13:37
Оценка:
Здравствуйте, acoder, Вы писали:

A>Не просветит ли кто-нибудь по вопросу function overloading.


A>Первый пример:

A>Как я понимаю, логика следующая: S, с помощью user defined conversion, можно превратить в сhar* и в short*. Оба преобразования эквивалентны, следовательно компилятор не может выбрать лучший вариант и выдает ошибку.
Все верно

A>Второй пример:

A>
A>// test2.cpp
A>struct B {};
A>struct D : private B {};

A>void f (B*);
A>void f (D*);

A>struct S {
A>   operator B* () const { return 0; }
A>   operator D* ()       { return 0; }
A>};

A>void foo(S & s)
A>{
A>    f(s);
A>}
A>

A>
A>g++ -c test2.cpp
A>

A>Ошибок нет. Под отладчиком проверил — выбирается f(D*). Отличие от первого примера только в том, что char* и short* можно конвертить друг в друга, а B* и D* нет. Но при чем здесь это?
Нет это здесь не причем. Здесь дело в const у оператора приведения типа к B*. Если убрать этот квалификатор, будет точно такай же ambiguous call to overloaded function как и в первом примере.
Дело в том, что объект s у тебя неконстантный и предпочтение отдается неконстантным функциям.

A>Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.