Shape
へのポインタを格納するDomain
とします。正確な形状(Triangle
またはRectangle
)はコンパイル時には分かりませんし、入力を読み込んだ後は明らかになります。実行時に、派生構造の変数にアクセスする必要があるかもしれませんが、ポインタが基本構造を指しているため、これは不可能です。私は "スイッチオンタイプ"を行うもう一つの解決策を見つけましたが、回答hereで指摘されているように落胆しています。彼はまた、あなたがポリモーフィズムを使用する場合多型の良い実践
が、あなたは、基本クラスの参照/ポインタの後ろに何があるかを気にする必要はありませんと言いました。
この場合、私は多形を使用すべきではないと思われるので注意します。私は下のことは悪いデザインだと思いますが、この問題を解決するには良いデザインは何ですか?
struct Shape
{
int common_variable;
};
struct Triangle: Shape
{
int triangle_specific_variable;
};
struct Rectangle: Shape
{
int rectangle_specific_variable;
};
struct Domain
{
Shape* shape;
};
int main()
{
Domain domain;
//domain.shape = new Triangle(); // depends on input.
//domain.shape = new Rectangle(); // depends on input.
return 0;
}
私は非常にあなたの質問や、あなたの例を理解していない。これを行うには
一つの方法は、「ビジターパターン」です。ここでは多態的なアプローチが役に立つと思われますが、私はあなたが手助けできるようにしようとしていることを十分に理解していません。 – callyalater
@callyalater:派生構造体固有の変数にアクセスする必要がありますが、ポインタが基本構造を指しているため、アクセスできません。 – Shibli
'Base'ポインタを介して' Derived'構造体のメンバにアクセスしたい場合は、 'dynamic_cast'を使うことができますが、' Base'クラスの多態性クラスを作る必要があります。例えば 'virtual void f(){ } '関数です。 – PcAF