如何从枚举模板参数中推导出数组大小?

Ali*_*Ali 8 c++ arrays enums templates

我应该如何改变之下,这样的代码Array<Index> array;是足够和SIZE自动从枚举推断?
即使枚举更改,也可以保证它包含SIZE引用正确的大小.

template <typename Enum, int N>
class Array {

public:
    int& operator[](Enum index) { return array[index]; }

private:
    int array[N];
};

enum Index { X, Y, SIZE };

int main() {

    Array<Index, SIZE> array;

    array[X] = 1;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

更新:至于"Array <type>意味着你正在创建一个Type对象数组"(Jerry)和"类模板的名称有点误导"(Nawaz):实际上我正在创建CustomSqlQueryModel <TableColumns>.以上只是一个简化的代码,仅此而已.Jerry和Nawaz很严格:这个简化的代码很不幸.

Fre*_*urk 6

你可以写一个特质类.每次定义新的枚举类型时,这需要一些额外的工作,但在用户代码中每次出现的Array <Index>都没有额外的工作:

template<class Enum>
struct ArrayTraits;

template<class Enum>
struct Array {
  int& operator[](Enum index) { return array[index]; }

private:
  int array[ArrayTraits<Enum>::size];
};

enum Index { X, Y, SIZE };

template<>
struct ArrayTraits<Index> {
  enum { size = SIZE };
};


int main() {
  Array<Index> array;
  array[X] = 1;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这样做的一个优点是,只要您知道如何获得最大尺寸,就可以专门设置您无法控制的外部枚举的特征.