私は自分自身にC++を教えようとしています。私が常に使ってきた伝統的な「新しい言語」演習の1つは、バイナリツリーやリンクリストのようなデータ構造を実装することです。 Javaでは、これは比較的簡単でした。インスタンス変数Object data
を保持していたクラスNodeを定義して、リストやツリーのすべてのノードにオブジェクトを格納できるようにしました。 (後で私はジェネリックスを使ってこれを修正することに取り組みました;それはこの質問に関するものではありません)。C++で任意のオブジェクト型への参照を保持しますか?
「あらゆるタイプのオブジェクト」を格納するのと同様の、慣用的なC++の方法はありません。 Cでは、void
ポインタを使用します。同じことがC++にも当てはまりますが、std::string
のインスタンスを作成し、それをリスト/ツリーに格納しようとすると問題に遭遇します(std::string&
からvoid*
への無効なキャストに関するもの)。そんなやり方はありますか? C++にはJavaのObject(またはObjective-CのNSObject)と同等のものがありますか?
ボーナスの質問:そうではなく、ボイドポインタを使用し続ける必要がありますが、std::string
をvoid*
に保存する「正しい」方法は何ですか?私はstatic_cast<char*>(str.c_str())
を見つけましたが、それは私がやろうとしていることのための冗長なようです。より良い方法がありますか?
この質問はなぜ却下されたのですか? –
私は知っていることにも興味があります - 私は二重引用符または何かを見つけることができませんでした... – Tim
これは古い冗談のようです。患者:これをすると痛い。医者:それをしないでください。 C++では、「何か」のコレクションをしないでください。 –