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