c++ 提升范围:any_range 和转换后的适配器
c++ boost ranges: any_range and transformed adaptor
我正在尝试将使用升压转换适配器的升压范围包装成升压任意范围,但这似乎不起作用。我构建了一个最小的例子来说明。
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 编译器一直告诉我 'returning address of local variable or temporary'。该代码在执行时也无法正确执行。在调试模式下一切正常。
我认为 any_range
无法按值理解转换后的适配器 returns,即使我将参考模板参数明确设置为 double
而不是默认 double&
.
any_range
我做错了什么? (使用 boost 1.64.0)
您需要将范围声明更改为 boost::any_range<const double, boost::forward_traversal_tag, const double>
,因为类型推导系统需要实现您的范围是只读的。
我正在尝试将使用升压转换适配器的升压范围包装成升压任意范围,但这似乎不起作用。我构建了一个最小的例子来说明。
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 编译器一直告诉我 'returning address of local variable or temporary'。该代码在执行时也无法正确执行。在调试模式下一切正常。
我认为 any_range
无法按值理解转换后的适配器 returns,即使我将参考模板参数明确设置为 double
而不是默认 double&
.
any_range
我做错了什么? (使用 boost 1.64.0)
您需要将范围声明更改为 boost::any_range<const double, boost::forward_traversal_tag, const double>
,因为类型推导系统需要实现您的范围是只读的。