Я пытаюсь использовать указатели на переменные-члены полиморфным способом.
Это работает:
struct Foo
{
int member0;
int member1;
int* getMember( int i )
{
static int Foo::* table[2] = { &Foo::member0, &Foo::member1 };
return &( this->*table[i] );
}
};
Это не так, поскольку члены не одного типа (BaseClass):
struct Foo
{
SubClassA member0;
SubClassB member1;
BaseClass* getMember( int i )
{
static BaseClass Foo::* table[2] = { &Foo::member0, &Foo::member1 };
return &( this->*table[i] );
}
};
Ошибка, сообщаемая g ++:
[...] invalid conversion from 'SubClassA Foo::*' to 'BaseClass Foo::*'
[...] invalid conversion from 'SubClassB Foo::*' to 'BaseClass Foo::*'
Есть ли способ заставить эту работу, то есть "вывести" указатель на член своего базового класса?