Требуется создать новый примешанный класс 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