Наследовать интерфейсы, которые разделяют имя метода
Есть два базовых класса с одинаковым именем функции. Я хочу унаследовать их обоих и перебрать каждый метод по-разному. Как я могу сделать это с отдельным объявлением и определением (вместо определения в определении класса)?
#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();
}
но есть ли другой способ сделать это что-то более общее, что будет работать в других компиляторах?