2

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

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无法理解转换后的适配器按值返回,即使我明确地将 Reference 模板参数设置为double而不是 default double&

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

4

1 回答 1

0

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

于 2017-05-29T16:45:47.100 回答