вариационная шаблонная перегрузка оператора [] в шаблонном классе

Я пытаюсь перегрузить оператор []. Следующий код не компилируется, и я подозреваю, что просто делаю синтаксическую ошибку, но мне нужна помощь, чтобы понять, что я делаю неправильно и почему.

Вот выдержка из соответствующего кода:

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: я пытаюсь следовать преобразованию времени компиляции в проверку типов, предложенную в верхней части этот ответ.

2

Решение

operator[] может принимать только один аргумент, самое простое решение — перегрузить operator() вместо этого и доступ к членам через () вместо [],

Правильный синтаксис будет тогда:

    template <class T>
template <class ... I>
T& MultiDimArray<T>::operator()(I ... i)
{
}

Вы также использовали список типов I как если бы они были именами параметров вместо имен типов (что исправлено в моем примере).

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]