Dziedzicz interfejsy, które mają wspólną nazwę metody
Istnieją dwie klasy podstawowe o tej samej nazwie funkcji. Chcę je odziedziczyć i przejechać każdą z metod inaczej. Jak mogę to zrobić z oddzielną deklaracją i definicją (zamiast definiować w definicji klasy)?
#include <cstdio>
class Interface1{
public:
virtual void Name() = 0;
};
class Interface2
{
public:
virtual void Name() = 0;
};
class RealClass: public Interface1, public Interface2
{
public:
virtual void Interface1::Name()
{
printf("Interface1 OK?\n");
}
virtual void Interface2::Name()
{
printf("Interface2 OK?\n");
}
};
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
Nie udało mi się przenieść definicji w VC8. Znalazłem specyficzne słowo kluczowe Microsoft __interface, które może wykonać tę pracę pomyślnie, poniżej:
#include <cstdio>
__interface Interface1{
virtual void Name() = 0;
};
__interface Interface2
{
virtual void Name() = 0;
};
class RealClass: public Interface1,
public Interface2
{
public:
virtual void Interface1::Name();
virtual void Interface2::Name();
};
void RealClass::Interface1::Name()
{
printf("Interface1 OK?\n");
}
void RealClass::Interface2::Name()
{
printf("Interface2 OK?\n");
}
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
ale czy jest inny sposób, aby zrobić coś bardziej ogólnego, który będzie działał w innych kompilatorach?