c++コンテナは異なる構造のデータを格納する

1586 ワード

本来はc++容器に異なる構造体を格納しようとしたが実現せず,最後に子類親類の相互変換により実現した.
ベースクラスを構築するコンテナを直接pushサブクラスにすることで,異なるデータ構造を挿入できるコンテナを実現した.
1、異なる構造体を同じベースクラスから派生したサブクラスとして作成し、サブクラスに自分の希望するデータ型を追加する.
Test.h
class Father
{
public:
    std::string flag = "I am Father";
};

class ChildOne :public Father
{
public:
    std::string c1_flag = "I am ChildOne";
    int c1_data = 999;
};

class ChildTwo :public Father
{
    public:
    std::string c2_flag = "I am ChildTwo";
    std::string c2_data = "ChildTwo Data";
};

2、サブクラスをインスタンス化してvectorにpushする(他の容器でも可)
    Father * father = new Father();
    cout << "father:" << father->flag << endl;
    ChildOne *c1 = new ChildOne();
    cout << "childone:" << c1->flag << endl;
    ChildTwo *c2 = new ChildTwo();
    cout << "childtwo:" << c2->flag << endl;
    vector*f_vec = new vector;
    f_vec->push_back(c1);
    f_vec->push_back(c2);

3、必要に応じてvecでベースクラスに変換したサブクラスを戻す
    cout << "c1:" << static_cast(f_vec->at(0))->flag <(f_vec->at(0))->c1_data << endl;
    cout << "c2:" << static_cast(f_vec->at(1))->flag <(f_vec->at(1))->c2_data << endl;

最終結果:
c1:I am ChildOne;999
c2:I am ChildTwo;ChildTwo Data
4、注意事項
コンテナ内のデータを削除する必要がある場合は、クラスdeleteを手動で削除する必要があります.そうしないと、メモリが漏れます.