примешанный класс для расширения функциональности метода
От: gencoder  
Дата: 28.12.16 15:25
Оценка:
Требуется создать новый примешанный класс Mix (серию классов), расширяющий функционал некоторого метода foo() уже существующего класса A. Метод foo() класса наследника A и Mix, выполняет и операторы A::foo() и операторы Mix::foo().

Попытка соорудить такой класс:
struct A
{
    void foo() 
    {
        cout << "A action";
    }
};

template<class D>
struct Mix
{
    void foo()
    {
        D* self = static_cast<D*>(this);
        self->foo();
        cout << "Mix action";
    }
};

struct  AM: public A, public Mix<AM> {} ;

int main() {
    AM am;
    am.foo();
    return 0;
}
// error: request for member 'foo' is ambiguous
множественное наследование
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.