Есть класс и перегрузка оператора []
template <class T, size_t N>
class Vect
{
public:
typedef unsigned int size_type;
T coord[N] = {};
constexpr T& operator [] (size_type index)
{
return coord[index];
}
}
Возможно каким то образом в compile-time проверить значение аргумента index? (index >= 0 && index < N)
Чтобы иметь возможность проверять какое-то значение во время компиляции, это значение должно использоваться в подходящем для этого контексте. Аргумент функции к такому контексту не относится. А вот если реализовать шаблонную функцию с non-type параметром, то это уже удастся сделать. Правда синтаксис уже будет иной:
#include <cstdlib>
template <class T, size_t N>
class Vect
{
public:
typedef unsigned int size_type;
T coord[N] = {};
template <size_type I>
constexpr T& get()
{
static_assert(I < N);
return coord[I];
}
};
int main() {
Vect<int, 10> v;
v.get<9>(); // OK
v.get<10>(); // Ошибка компиляции
}
Подобный функционал уже имеется в стандартной библиотеке при использовании std::get на std::array.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости