0

C ++は初めてですが、それでも理解できます。テンプレートを使用して私はこれを持っています:

template<typename TransportType>
Automobile<TransportType>::Automobile(std::string make)
    : Transport(make)

だから私はこれらのいくつかを持っていますが、それらはすべて「トランスポート」から継承しています。たとえば、別のものは次のとおりです。

template<typename TransportType>
Aircraft<TransportType>::Aircraft(std::string make)
    : Transport(make)

Automobile<Coach> * coach = new Automobile<Coach>("Volvo");
Aircraft<JumboJet> * jumbojet = new Aircraft<Jumbojet>("Boeing");`

私の質問は、あるトランスポートタイプがある場合、実行時までトランスポートタイプを入力せずに、どのようにそれを別のトランスポートタイプに「変換」できるかということです。例えば:

*coach = dynamic_cast<*jumbojet typeid<transporttype>>(jumbojet);`

(*ジャンボジェットtypeidであるかどうかわからないビット)

memcpyを見てみましたが、うまくいかなかったようです。(実際のオブジェクト内にポインターが含まれている場合は問題が発生する可能性があることを理解していますが、そうではありません。)

memcpy(*jumbojet, *coach, sizeof(coach))

4

1 に答える 1

1

それをやろうとするのをやめなさい。実行時にキャストする必要はありません。代わりに、仮想関数(つまり、実行時ポリモーフィズム)を使用して、実行時に基本クラスを任意の派生クラスにキャストする必要をなくすことを検討してください。

于 2013-03-18T03:07:54.423 に答える