Наследовать интерфейсы, которые разделяют имя метода

Есть два базовых класса с одинаковым именем функции. Я хочу унаследовать их обоих и перебрать каждый метод по-разному. Как я могу сделать это с отдельным объявлением и определением (вместо определения в определении класса)?

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

Я не смог перенести определение в VC8. Я обнаружил, что ключевое слово Microsoft Specific __interface может успешно выполнять эту работу, код ниже:

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

но есть ли другой способ сделать это что-то более общее, что будет работать в других компиляторах?

Ответы на вопрос(5)

Ваш ответ на вопрос