C \[\] 具有多个参数的数组运算符?

新手上路,请多包涵

我可以在 C++ 中定义一个接受多个参数的数组运算符吗?我试过这样:

 const T& operator[](const int i, const int j, const int k) const{
    return m_cells[k*m_resSqr+j*m_res+i];
}

T& operator[](const int i, const int j, const int k){
    return m_cells[k*m_resSqr+j*m_res+i];
}

但我收到了这个错误:

 error C2804 binary operator '[' has too many parameters

原文由 genesys 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答

在 C++23 之前,您不能重载 operator[] 以接受多个参数。作为一种解决方法,您可以重载 operator() 。 (请参阅 如何为 Matrix 类创建下标运算符? 来自 C++ 常见问题解答。)


从 C++23 开始,如 cigien 的(已删除) 答案 中所述,多个下标参数可以直接传递给 operator[] 。从 cppreference 页面查看这个 演示

原文由 jamesdlin 发布,翻译遵循 CC BY-SA 4.0 许可协议

编辑:正如评论中所指出的,在 C++20 中,运算符逗号将被弃用,如下面的答案。

你不能重载 operator[] ,但是 你可以 通过重载 operator, 来伪造它。

按照您的代码,它变为:

 T& operator,(const int i, const int j, const int k){
    return m_cells[k*m_resSqr+j*m_res+i];
}

现在你可以打电话了

something[1, 2, 3]

您可以使用模板、带有可变参数的模板、 std::pairstd::tuple 扩展它,具体取决于您的用例和 C++ 版本

原文由 Moia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题