C++ 提升范围:any_range和转换适配器

c++ boost ranges: any_range and transformed adaptor

本文关键字:range 转换 适配器 any 范围 C++      更新时间:2023-10-16

我正在尝试将使用升压转换适配器的升压范围包装成任何升压范围,但这似乎不起作用。我构建了一个最小的例子来说明。

std::vector<int> myInts = { 1,2,3,4,5 };
boost::any_range<double,boost::forward_traversal_tag,double> range =
myInts | boost::adaptors::transformed( []( int x ) { return static_cast<double>( x ); } );
for ( double x : range )
std::cout << x << "n"; 

在发布模式下,我的VS2015编译器一直告诉我"返回局部变量或临时变量的地址"。代码在执行时也无法正确执行。在调试模式下,一切都很好。

我认为不知何故,即使我明确将参考模板参数设置为double而不是默认double&any_range也无法理解转换后的适配器按值返回。

我做错了什么any_range?(使用提升 1.64.0)

您需要将范围声明更改为boost::any_range<const double, boost::forward_traversal_tag, const double>,因为类型推断系统需要实现您的范围是只读的。