【问题标题】:variadic templated overload of operator [] in templated class模板类中运算符 [] 的可变参数模板化重载
【发布时间】:2013-12-17 18:19:19
【问题描述】:

我正在尝试重载运算符 []。以下代码无法编译,我怀疑我只是犯了语法错误,但我需要帮助了解我做错了什么以及为什么。

以下是相关代码的摘录:

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 顶部建议的可转换为类型检查的编译时间。

【问题讨论】:

标签: c++ c++11 operator-overloading variadic-templates subscript-operator


【解决方案1】:

operator[] 只能接受一个参数,最简单的解决方案是重载operator() 并通过() 而不是[] 访问成员。

那么正确的语法应该是:

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

您还使用类型列表 I,就好像它们是参数名称而不是类型名称(在我的示例中已修复)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多