これはばかげた質問のように思えるが、私は、派生クラスをインスタンス化し、1行で基底クラスに割り当てることができるようにしたい:C++ベースクラスに派生クラスを割り当てるためのより良い方法は
class A { };
class B : public A { };
// i can do this
A *base;
B derived;
base = &derived;
// i'd like to do something like this
A *base;
base = &B(); // produces a warning: taking address of temporary
私は新しい演算子を使用せずに多態的な動作を取得しようとしています。私は、コンパイラがコンストラクタの戻り値に一時的な参照を挿入していると思います。私は実際に割り当てのためにそのアドレスを使用したいとコンパイラに指示することは可能ですか?
* EDITは
ここで少し状況です。
class element { virtual void load_xml(...); };
class city : public element { ... };
class state : public element { ... };
element *base;
// read some xml
if (xml_node == "city") {
base = &city();
} else if (xml_node == "state") {
base = &state();
}
base.load_xml(...);
アイデアは、各派生ノードが自身を水和する方法を知っているし、そうすることをload_xml()関数をオーバーライドするということです。私は、XMLファイルを解析する際に、このような何かを持っています。私は本当にすべきことは、それぞれの派生クラスをベースに割り当て、最後にベースからload_xmlを呼び出すのではなく、各ifブロックでload_xmlを呼び出すことだと思います。
ありがとうございます!
VS2010では警告が表示されません。どのコンパイラを使用していますか? –
私は、あなたが言っていることや考えていることの大半は、あなたが望むと思うことは理にかなっていないと思います。あなたは少し前に戻って、あなたが解決する必要がある問題を言うことができますか? 'A * p = new B();'と言っているのですか? –
@phillip gcc 4.5.2は私が使用しているコンパイラです – JaySilk84