Vererben Sie Schnittstellen, die einen Methodennamen gemeinsam haben

Es gibt zwei Basisklassen mit demselben Funktionsnamen. Ich möchte beide erben und jede Methode anders übergehen. Wie kann ich das mit separater Deklaration und Definition machen (anstatt in der Klassendefinition zu definieren)?

#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();
}   

Ich konnte die Definition in VC8 nicht verschieben. Ich habe festgestellt, dass das Microsoft-spezifische Schlüsselwort __interface diesen Job erfolgreich ausführen kann. Code unten:

#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();
}  

Aber gibt es eine andere Möglichkeit, dies allgemeiner zu gestalten, die in anderen Compilern funktioniert?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage