覚書。
「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