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

时间:2019-09-04 17:48:18

标签: c++ operator-overloading

我想重载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';
        }
    }
};

2 个答案:

答案 0 :(得分:5)

不可能。

您需要选择其他语法,例如:

  • CREATE TABLE YourTable (ID int, Random_ID int); INSERT INTO YourTable VALUES(1 ,123), (10,456), (25,789), (1 ,1112), (55,1314), (10,1516); GO WITH CTE AS( SELECT ID, Random_ID, MIN(Random_ID) OVER (PARTITION BY ID) AS Min_Random_ID FROM YourTable) UPDATE CTE SET Random_ID = Min_Random_ID; GO SELECT * FROM YourTable; GO DROP TABLE YourTable; -重载MyClass(1,5)
  • operator()-成员函数。
  • MyClass.foo(1,5)-重载了MyClass[{1,5}]的类类型参数,该参数具有一个接受2个参数的构造函数。

答案 1 :(得分:1)

您可以使用例如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;