ポリモーフィックな方法でメンバー変数へのポインターを使用しようとしています。
これは機能します:
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::*'
これを機能させる方法、つまり、メンバーポインタをその基本クラスに「アップキャスト」する方法はありますか?