c ++ boost范围:any_range和转换后的适配器

时间:2017-05-29 16:15:59

标签: c++ boost boost-range boost-iterators

我试图将一个使用boost转换适配器的增强范围包装到一个提升范围内,但这似乎不起作用。我构建了一个最小的例子来说明。

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编译器一直告诉我“返回本地变量的地址”或“临时”#。执行时代码也无法正确执行。在调试模式下,一切都很好。

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

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

1 个答案:

答案 0 :(得分:1)

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