2

C ++で継承を使用せずに、任意のタイプのオブジェクトを保持できる配列を作成できるかどうかを示すコード例を誰かに教えてもらえますか? まだコードを書いていませんが、たとえば、RangedWeap と MeleeWeap の 2 つのクラスがある場合、継承を使用せずにこれらのオブジェクトを同じ配列に格納する方法はありますか?

4

3 に答える 3

7

オブジェクトを保存する場合は、いいえ。これは、配列が連続したメモリにオブジェクトを格納し、格納された各オブジェクトのサイズが同じであるためです。これは、必ずしも異なるタイプに当てはまるとは限りません。

を保存する醜い方法がありvoid*ますが、それはオブジェクトではなくポインターを保存することになります。また、すべてのタイプ情報が失われるため、役に立ちません。どのように世界で何をvoid*指しているのかを判断できますか (基本クラスがない場合)。

于 2012-07-17T17:54:48.143 に答える
2

Boost.Anyはこれを有効にしますが、(おそらく?) 内部で継承を使用します。

于 2012-07-17T17:56:40.033 に答える
0

2 つのオブジェクトを区別するのは困難ですが、その方法があれば、次のように使用できますunion

struct A
{
    int type;  // to distinguish
    ...
};

struct B
{
    int type;
    ...
};

union AB
{
    int type;
    A a;
    B b;
};

AB array[] = {<whatever>};

後で、typeいつアクセスするかを確認して、各要素にアクセスする必要があるかどうかを確認する必要がありaますb

注: @chris に従ってC++11 を使用していない限り、オブジェクトはPODである必要があります。

于 2012-07-17T17:56:26.977 に答える