- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 boost::irange
并创建了一个辅助函数,通过消除对显式模板参数的需要来简化代码。我不明白为什么它不起作用。代码如下:
#include <iostream>
#include <boost/range/irange.hpp>
template<typename T>
boost::irange<T> range_from_zero(T limit)
{
return boost::irange<T>(T(), limit);
}
int main() {
size_t end = 100;
for (auto i : range_from_zero(0,end))
std::cout << i << ' ';
return 0;
}
这里有一个现场版本 https://ideone.com/VVvW6e ,这会产生编译错误
prog.cpp:5:8: error: 'irange<T>' in namespace 'boost' does not name a type
boost::irange<T> range_from_zero(T limit)
^
prog.cpp: In function 'int main()':
prog.cpp:12:41: error: 'range_from_zero' was not declared in this scope
for (auto i : range_from_zero(0,end))
如果我直接在 range-for 中使用 boost::irange
,那么它可以工作:
#include <iostream>
#include <boost/range/irange.hpp>
int main() {
size_t end = 100;
for (auto i : boost::irange<size_t>(0,end))
std::cout << i << ' ';
return 0;
}
这工作正常:https://ideone.com/TOWY6H
我认为也许是在函数的返回上使用 range-for 时出现的问题,但事实并非如此;这可以使用 std::vector
:
#include <iostream>
#include <boost/range/irange.hpp>
template<typename T>
std::vector<T> range_from_zero(T limit)
{
auto range = boost::irange<T>(T(), limit);
return { std::begin(range), std::end(range) };
}
int main() {
size_t end = 100;
for (auto i : range_from_zero(end))
std::cout << i << ' ';
return 0;
}
请问有什么想法吗?
最佳答案
<小时/>
但是,首先, Live On Coliru 有什么问题吗?
for (size_t i : irange(0, 100))
size_t end = 100;
for (auto i : irange(0ul, end))
<小时/>
irange
是一个函数模板,不能用作返回类型。
返回类型为integer_range
或strided_integer_range
。因此,irange
已经是您正在寻找的功能。
只是,您没有传递可以明确推导出来的参数。如果您可以允许这样做,请“复制”irange()
使用单独的模板参数类型作为边界值来实现,并使用例如std::common_type<T1,T2>::type
作为范围元素。
这是我的写作尝试range_from_zero
没有在接口(interface)中命名实现细节:
#include <iostream>
#include <boost/range/irange.hpp>
template <typename T>
auto izrange(T upper) -> decltype(boost::irange(static_cast<T>(0), upper)) {
return boost::irange(static_cast<T>(0), upper);
}
int main() {
size_t end = 100;
for (size_t i : izrange(end))
std::cout << i << ' ';
}
关于c++11 - C++ range-for 和 boost::irange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966216/
我在 Visual Studio 2010 中使用 C#.net 4.0。我收到错误消息 Error 10 The type or namespace name 'IRange' could not
我使用Spreadsheetgear生成Excel工作簿。 我的工作簿非常简单: 我在单元格中插入字符串 第一行是粗体 我在标题周围和列之间绘制边框。 在过程结束时,我调用myRange.Colu
几个answers和讨论,甚至是source code boost::irange 的作者提到,在原始 for 循环中使用这些范围会降低性能。 但是,例如对于下面的代码 #include int s
这个问题有点哲理。 Python 2 中有出色的 itertools 模块,特别是提供了 Python 内置函数的生成器等价物,如 map、filter、zip,或切片。等价物分别称为 imap、if
我有一个游程编码向量,按顺序代表基因组上每个位置的某个值。作为一个玩具示例,假设我只有一条长度为 10 的染色体,那么我将得到一个如下所示的向量 library(GenomicRanges) set.
我正在使用 boost::irange 并创建了一个辅助函数,通过消除对显式模板参数的需要来简化代码。我不明白为什么它不起作用。代码如下: #include #include template b
这个问题在这里已经有了答案: Neatest way to loop over a range of integers (6 个答案) 关闭 3 年前。 随着范围合并到 C++20,我希望我们能得到
当我遇到这个 RangeGenerator 时,我正在浏览 Python Generators Wiki。讨论 irange() - 的页面 This will let us iterator ove
我正在尝试使用 Spreadsheet Gear 读取 Excel 文件的使用范围,目前我已将其设置为执行此操作: var workbook = Factory.GetWorkbookSet().Wo
我在计算间隔重叠时遇到了困难,正如我所期望的那样。这是一个 R data.table,其间隔由开始到结束定义: > library(data.table) > dt1 = data.table(sta
我正在尝试选择“使用范围”。我得到了工作表的 UsedRange,然后在其上调用 Select 函数。我在选择调用中收到 HRESULT 0x800a03ec。 这是代码: COleVariant 结
我是一名优秀的程序员,十分优秀!