2

我想重載運算符[]。下面的代碼不能編譯,我懷疑我只是犯了一個語法錯誤,但我需要幫助理解我在做什麼錯誤以及爲什麼。在模板類中運算符[]的可變模板超載

下面是相關代碼的摘錄:

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:我想按照編譯時轉換爲類型在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就好像它們是參數名稱,而不是類型名稱(這是在我的例子固定)。