覚書。

 

「std::vector風の初期化リストサポート」は、自作クラスでも完全に実装できます!

clVector<MyItem> vMyItems = {
    {96,120},{91,70},{89,210}  // などなど
};

このように**{}初期化のシンタックス**を使えるようにするには、以下の仕込みが必要です:
【必要なもの】
1. ヘッダに #include <initializer_list>

#include <initializer_list>

2. 初期化リスト対応のコンストラクタ追加

template <typename T>
class clVector {
private:
    T* mpData = nullptr;
    size_t mSize = 0;

public:
    // 初期化リストコンストラクタ
    clVector(std::initializer_list<T> initList) {
        mSize = initList.size();
        if (mSize > 0) {
            mpData = new T[mSize];
            size_t i = 0;
            for (const auto& item : initList) {
                mpData[i++] = item;
            }
        }
    }

    // その他の基本構成も自作で(operator[], destructor など)
    ~clVector() { delete[] mpData; }

    T& operator[](size_t i) noexcept { return mpData[i]; }
    const T& operator[](size_t i) const noexcept { return mpData[i]; }

    size_t size() const noexcept { return mSize; }
};

【MyItemなどの構造体は?】

struct MyItem {
    int weight;
    int value;
};

これだけで {96,120} のような記法が通るようになります。
【結果として使えるコード】

clVector<MyItem> vMyItems = {
    {96,120},{91,70},{89,210},{88,20}
};

vMyItems[2].weight == 89、vMyItems.size() == 4 のようにちゃんと使えます。

 

引用 ChatGPT