Перегрузка метода при множественном наследовании.
От: Maxim Lock Россия  
Дата: 12.03.04 19:25
Оценка:
Приветствую, господа, и, дамы, если есть, конечно тоже.

Попробовал поискать здесь и в инете, но безуспешно. Если коротко, пример:

class P1 {}; 
class P2 {};

class A
{
public:
    void f( P1* );
};

class B
{
public:
    void f( P2* );
};

class C : 
    public A, 
    public B
{
public:
    C()
    {
        P2* p;
        f( p );
    }
};

int main()
{
    C q;
}


на что например ICL (уверен, что справедливо) отвечает:

test1.cpp
test1.cpp(18): error: "С::f" is ambiguous
f( p );
^

Почему не разрешена такая перегрузка, с точки зрения компилятора — все однозначно. Можно просто указать пункт стандарта в котором описана данная ситуация, я не нашел.

В моей ситуции указывать явно имя базового класса при вызове f() нельзя, (хотя бы потому что оно очень длинное, это шаблон). Хочется найти элегантное решение.

Спасибо.

Исправлена раскраска — WH
... << RSDN@Home 1.1.3 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.