是否可以在C++中使操作员"..."过载?
Is it possible to overload operator "..." in C++?
#include <iostream>
#include <vector>
using namespace std;
//
// Below is what I want but not legal in current C++!
//
vector<int> operator ...(int first, int last)
{
vector<int> coll;
for (int i = first; i <= last; ++i)
{
coll.push_back(i);
}
return coll;
}
int main()
{
for (auto i : 1...4)
{
cout << i << endl;
}
}
我想使用语法1...100
,7...13
,2...200
等生成整数序列。
我想在C 中超载...
。
可能吗?
可能吗?
不,不可能。
...
不是操作员,而是 variadic参数的占位符。
C 中没有...
运算符,因此您不能超载。
但是,您可以使用普通名称,例如range
。
假设定义合适的range
功能的标头,您的预期程序
int main() { for (auto i : 1...4) { cout << i << endl; } }
&hellip;然后可以看起来像这样:
#include <p/expressive/library_extension.hpp>
using progrock::expressive::range;
#include <iostream>
#include <vector>
using namespace std;
int main()
{
for( auto i : range( 1, 4 ) )
{
cout << i << endl;
}
}
这是使用表达式C 库的range
的实际工作代码执行。但是,那是图书馆目前处于非常婴儿的阶段,包括各种瑕疵和根本性每天都会改变。也实现了扩展C 的方言,这是我本人以外的所有人都不熟悉的,因此在此处发布纯C 的range
实现可能会/可能会引起负面反应;对不起。但是您可以轻松地将该实现转换为RAW C 。这是Boost 1.0许可。
如其他答案中所述,这是不可能的,因为...
不是有效的操作员,但是在这种语言中,您始终可以创建这样的奇怪的成语:
#include <iostream>
struct int_it
{
int_it (int l, int r): left(l), right(r){}
void operator++() { left++;}
bool operator!=(const int_it& rhs) { return left != rhs.right;}
int operator*(){ return left;};
int left;
int right;
};
class range_op
{
public:
static range_op op() { return {0,0}; }
operator int() { return right - left; }
auto begin(){ return int_it{left, right}; }
auto end(){ return int_it{right,right}; }
private:
range_op(int l, int r): left(l), right(r){}
int left;
int right;
friend range_op operator*(int lhs, range_op r);
friend range_op operator*(range_op r, int rhs);
};
range_op operator*(int lhs, range_op r)
{
return range_op{lhs, r.right};
}
range_op operator*(range_op d, int rhs)
{
return range_op{d.left, rhs};
}
const auto o = range_op::op();
int main() {
for (int i : 2*o*6)
{
std::cout << i << std::endl;
}
return 0;
}
这只是一个快速示例,因此没有范围检查和很多错误。
相关文章:
- C++中>>操作员过载时出现问题?
- SFINAE不能防止模棱两可的操作员过载吗?
- 在这种情况下是私有的吗?试图使操作员<<过载
- C++操作员过载>>
- 需要帮助操作员过载,这样我才能显示功能
- C++操作员过载?
- 如何在结构内使操作员<<过载
- C++ - 试图使操作员"<<"过载
- 何时必须使操作员<<过载?
- C 如何在另一类中使用操作员过载
- 操作员过载但不可行
- 不能<<操作员过载
- C /CLI操作员=过载参考
- 提升::访客操作员过载的变体"Error: no match for call to [...]"
- 操作员+过载有什么问题?
- 是否可以在C++中使操作员"..."过载?
- 旋转测试操作员过载
- 操作员过载功能
- C++ 操作员过载问题
- 操作员过载的正确方法是什么,为什么这不起作用