Heredar interfaces que comparten un nombre de método.

Hay dos clases base que tienen el mismo nombre de función. Quiero heredar ambos, y sobrepasar cada método de manera diferente. ¿Cómo puedo hacer eso con una declaración y definición separadas (en lugar de definir en la definición de clase)?

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

Fallé al mover la definición a VC8. Encontré que la palabra clave específica de Microsoft __interface puede hacer este trabajo con éxito, código a continuación:

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

pero, ¿hay otra forma de hacer esto algo más general que funcione en otros compiladores?

Respuestas a la pregunta(5)

Su respuesta a la pregunta