我想声明一个函数,它获取一个范围作为输入,输出一个数字并将其直接与 range-v3 库的 range::views::transform 一起使用。
以下内容有效,但我必须使用一个实际上不做任何事情的 lambda。
int64_t getGroupValue( ranges::input_range auto&& group ) {
return ranges::accumulate( group, 1ll, ranges::multiplies() );
}
int64_t calculateGroupSum( const std::vector<int>& data ) {
using ranges::views::transform;
using ranges::views::chunk;
return ranges::accumulate(
data
| chunk( 3 )
| transform( [] ( auto group ) { return getGroupValue( group ); })
, 0ll);
}
Run Code Online (Sandbox Code Playgroud)
我想做以下事情:
int64_t calculateGroupSum( const std::vector<int>& data ) {
using ranges::views::transform;
using ranges::views::chunk;
return ranges::accumulate(
data
| chunk( 3 )
| transform( getGroupValue )
, 0ll);
}
Run Code Online (Sandbox Code Playgroud)
通过为 getGroupValue() 使用不同的参数类型是否可以实现这一点,或者我是否必须使用 lambda?
函数模板无法传递。*
一种方法是将其包装在 lambda 对象中,就像您已经做的那样,或者您可以首先将其编写为函数对象。
struct getGroupValue_op{
int64_t operator()( ranges::input_range auto&& group ) const{
return ranges::accumulate( group, 1ll, ranges::multiplies() );
}
} getGroupValue;
Run Code Online (Sandbox Code Playgroud)
*如果参数具有特定类型,它可以工作,但情况并非如此range::views::transform
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |