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が使えるならそっちの方が用途としては良いかもしれませんね。