重载运算符 [] 以接受范围

Overloading Operator [] to Accept Range

本文关键字:范围 运算符 重载      更新时间:2023-10-16

我想重载 operator[] 以接受 2 个int,以便用户能够指定一系列索引,如下所示:

MyClass[1:5]

我试过这个:

void operator[](const int, const int);

希望我能够将其与逗号一起使用:

MyClass[1,5]

但是我收到编译器错误:

too many parameters for this operator function

有没有办法让我实现这样的行为?

谢谢

编辑: 我希望操作员能做这样的事情:

struct MyClass
{
vector<std::string> data;
void operator[] (const int start, const int end)
{
for(int index = start; index <= end; index++)
{
cout << data[index] << 'n';
}
}
};

这是不可能的。

您需要选择不同的语法,例如:

  • MyClass(1,5)- 超载operator().
  • MyClass.foo(1,5)- 成员函数。
  • MyClass[{1,5}]- 使用类类型的参数重载operator[],该参数具有接受 2 个参数的构造函数。

例如,您可以使用 std::initializer_list 作为参数。

例如

T & operator []( const std::initializer_list<size_t> & );
const T & operator []( const std::initializer_list<size_t> & ) const;

或者就像

T operator []( const std::initializer_list<size_t> & ) const;