мне нужно реализовать безопасный класс массива, который контролирует индекс при доступе к лежащей в основе массива C:ИНИЦИАЛИЗИРУЙТЕ C++ элемент массива в шаблоне класса
template <typename T, int N> class SafeArray
{
public:
T &operator[](int index)
{
assert(0 <= index && index < N);
return m_data[index];
}
private:
T m_data[N];
};
И вместо bool a[3];
, теперь я пишу SafeArray<bool, 3> a;
.
Как поддерживать инициализацию массива, например bool b[3] = {false};
? Я имею в виду, что мне следует сделать, чтобы получить b.m_data[] = {false, false, false}
после того, как был создан SafeArray<bool, 3> b;
?
Я предполагаю, что я должен добавить конструктор в SafeArray
, но что будет телом этого конструктора? Параметр шаблона T
может быть любым, не обязательно bool
. Я использую pre-C++ 11.
станд :: initializer_list .Проверить один из моих [вопросов] (http://stackoverflow.com/questions/16455029/how-to-implement-an-initializer-list-for-user-defined -typeanalogus-to-stdvec) –
Вы хотите повторно реализовать std :: array <>? Вы можете использовать именно это, а не учиться на чтении источника –
для pre-C++ 11, я чувствовал, что вы можете что-то сделать, подготовив шаблон инициализации для каждой длины.шаблон init для длины 2 будет использовать шаблон инициализации для длины 1 плюс еще один. упоминается где-то, возможно, в Modern C++ Design Alexandrescu –