我试图将一个使用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)
答案 0 :(得分:1)
您需要将范围声明更改为boost::any_range<const double, boost::forward_traversal_tag, const double>
,因为类型扣除系统需要实现您的范围是只读的。