Я пытаюсь перегрузить оператор []. Следующий код не компилируется, и я подозреваю, что просто делаю синтаксическую ошибку, но мне нужна помощь, чтобы понять, что я делаю неправильно и почему.
Вот выдержка из соответствующего кода:
template <typename T>
class MultiDimArray{
public:
template <typename ...I>
T& operator[](const size_t firstIndex,const size_t ...I);
//...
}
template <typename T> //class's template parameter(s)
template <typename ...I> //function's template parameter(s)
T& MultiDimArray<T>::operator[](const size_t firstIndex,const size_t ...I){
//...
}
Примечание 1: я пытаюсь следовать преобразованию времени компиляции в проверку типов, предложенную в верхней части этот ответ.
operator[]
может принимать только один аргумент, самое простое решение — перегрузить operator()
вместо этого и доступ к членам через ()
вместо []
,
Правильный синтаксис будет тогда:
template <class T>
template <class ... I>
T& MultiDimArray<T>::operator()(I ... i)
{
}
Вы также использовали список типов I
как если бы они были именами параметров вместо имен типов (что исправлено в моем примере).
Других решений пока нет …