Mig*_*uel 0 c++ set-theory c++14
自然数n的形式定义(在集合论中)如下:
我认为这会使一些C++代码更简单,如果我被允许这样做:
for (int n : 10)
cout << n << endl;
Run Code Online (Sandbox Code Playgroud)
它打印的数字从0到9.
所以我尝试执行以下操作,但不编译:
#include <iostream>
#include <boost/iterator/counting_iterator.hpp>
boost::counting_iterator<int> begin(int t)
{
return boost::counting_iterator<int>(0);
}
boost::counting_iterator<int> end(int t)
{
return boost::counting_iterator<int>(t);
}
int main()
{
for (int t : 10)
std::cout << t << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何建议?我用clang ++得到以下错误:
main.cpp:22:20: error: invalid range expression of type 'int'; no viable 'begin' function available
for (int t : 10)
^ ~~
Run Code Online (Sandbox Code Playgroud)
但我想我应该被允许这样做!:)
编辑:我知道如果我在for循环中添加"range"(或其他一些单词)这个词,我可以"伪造"它,但我想知道是否可以不使用它.
Mar*_*ica 10
它无法完成.从C++ 14标准草案的 6.5.4节(但C++ 11将非常相似)
begin-expr和end-expr确定如下:
(1.1) - 如果_
RangeT是数组类型,[...];
嗯,这个显然不适用.An int不是数组
(1.2) - 如果_RangeT是类类型,[...]
不,这也不适用.
(1.3) -否则,开始-EXPR和最终EXPR是
begin(__range)和end(__range)分别
哦哦!这看起来很有希望.您可能需要移动begin并end进入全局命名空间,但仍然......
在相关名称空间中查找
begin和end查找的位置(3.4.2).[注意:不执行普通的非限定查找(3.4.1). - 结束说明]
(强调我的).烦!没有任何关联的命名空间int.具体来说,请参见第3.4.2节
- 如果T [
int在我们的例子中]是一个基本类型,它的相关命名空间和类集都是空的.
唯一的工作是编写一个range具有合适的开始和结束方法的类.然后你可以写出非常pythonic:
for (int i : range(5))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |