我试图重载运算符[]。下面的代码没有编译,我怀疑我只是犯了一个语法错误,但我需要帮助理解我做错了什么以及为什么。
以下是相关代码的摘录:
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 :(得分:4)
operator[]
只能使用一个参数,最简单的解决方案是重载operator()
,并通过()
而不是[]
访问成员。
然后正确的语法是:
template <class T>
template <class ... I>
T& MultiDimArray<T>::operator()(I ... i)
{
}
您还使用了类型列表I
,就好像它们是参数名称而不是类型名称(在我的示例中已修复)。