重载运算符 [] 以接受范围
Overloading Operator [] to Accept Range
我想重载 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;
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- ::(范围解析运算符)前面没有任何东西
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 迭代器的范围 TS 和 C++20 概念是否需要能够使用"运算符>"?
- 运算符重载中的范围运算符
- 重载运算符 [] 以接受范围
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 为什么C++找不到布尔运算符,当有一个!范围内的运算符?
- 运算符>的范围
- 范围分辨率运算符在类型:: var的情况下返回什么
- 如何在C 中访问无范围分辨率运算符的标头构件类型
- 为什么我们要把 :: (范围重新定位运算符)放在迭代器之前
- 删除复制构造函数和运算符=类范围访问
- 为什么可以使用范围运算符和类 A 名称在类 B 中访问类 A(公共)中的枚举
- 友元运算符中的变量范围
- C++是否提供了一种在没有范围解析运算符的情况下访问类中的类的方法?
- 范围运算符需要查找 std 命名空间而不是提升
- 为什么使用范围运算符 (::)在C++类初始化之前
- C++范围运算符分组
- 派生列表中的C++范围运算符