2

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

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

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){ 
    //... 
} 

Note1: Я пытаюсь следить за время компиляции раскладывающихся проверок типов, предложенные на вершине this answer.

+0

Также см. Http://www.parashift.com/c++-faq/matrix-subscript-op.html – dyp

ответ

4

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

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

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

Вы также использовали список типов I, как если бы они были имена параметров вместо имен типа (который фиксируется в моем примере).

 Смежные вопросы

  • Нет связанных вопросов^_^