Eredita le interfacce che condividono il nome di un metodo

Ci sono due classi base con lo stesso nome di funzione. Voglio ereditarli entrambi e superare ogni metodo in modo diverso. Come posso farlo con dichiarazione e definizione separate (invece di definire nella definizione della class)?

#include  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(p); q->Name(); } 

Non sono riuscito a spostare la definizione in VC8. Ho trovato che l’interfaccia __ specifica parola chiave Microsoft può eseguire correttamente questo lavoro, codice di seguito:

 #include  __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(p); q->Name(); } 

ma c’è un altro modo per fare questo qualcosa di più generale che funzionerà in altri compilatori?