これは、おそらくコード例で最もよく示されています。以下は g++ でのコンパイルに失敗します。
struct Base {
};
struct Derived : public Base {
};
struct Container {
Derived data_;
};
int main(void) {
Base Container::*ptr = &Container::data_;
}
次のエラーが表示されますinvalid conversion from 'Derived Container::*' to Base Container::*'
。これは言語で許可されていませんか?これはコンパイラのバグですか? 間違った構文を使用していますか?
助けてください!
なぜこれをやろうとしているのかについての背景: 主に派生型として使用したいメンバー データがいくつかありますが、いくつかの共通コードを介してデータを入力できるようにしたいと考えています。データは任意の順序で送信され、入力する適切なメンバー データを選択するために使用する文字列ラベルがあります。std::map<std::string, Base Container::*>
共通のインターフェイスを介して各メンバーにデータを割り当てるを作成することを計画していました。if else
適切なメンバーデータを見つけるために巨大な構造を持たないようにしたいと思います。