EnumでIndexを指定する配列
タイトルのようなものが欲しかったので自分で書いてみました。しかし、C++のenumは型ではない微妙なものなので色々と不便ですね。
#include <vector> template<typename T, typename Enum, int Size> class EnumArray { public: EnumArray() :_array(Size) {} EnumArray(T init) :_array(Size, init) {} ~EnumArray() {} size_t size() const { return _array.size(); } const T& operator[](const Enum& index) const { return _array[index]; } T& operator[](const Enum& index) { return _array[index]; } private: std::vector<T> _array; };
使い方は以下のような形です。
#include <iostream> enum IndexEnum { A, B, C, D, Count, }; int main(int, char**) { EnumArray<int, enum IndexEnum, Count> intArray(-1); intArray[A] = 1; intArray[C] = 3; for (int index = 0, size = intArray.size(); index < size; ++index) { std::cout << intArray[(IndexEnum)index] << std::endl; } return 0; }
しかし、EnumArrayの最後のtemplate引数をもうちょっとうまく指定できたら便利そうなんですけど、「IndexEnum::Count」とは書けないので悩ましいところです。
また、実装にstd::vectorを使ってますがboost::arrayが使えるならそっちの方が用途としては良いかもしれませんね。