有没有相当于查看成员函数/变量?

时间:2015-03-17 22:25:48

标签: c++ c++11 boost-range range-v3

Streams library具有整齐的map函数,可通过成员函数查看范围。 Range-V3中有任何等效视图吗?

view::transform会是唯一的选择吗?

1 个答案:

答案 0 :(得分:7)

文章的例子:

std::vector widgets = /* ... */    
std::set ids = stream::MakeStream::from(widgets)
         .map(&Widget::getId)
         .to_set();
范围-v3中的

(忽略std::vectorstd::set的缺失模板参数)将是:

std::vector<Widget> widgets = // ...
std::set<Widget::ID> ids = widgets | ranges::view::transform(&Widget::getId);

是的,transform相当于Streams中的map

range-v3中的所有算法都接受Invokable Projections,允许算法在转换的基础上选择范围元素,但仍然对整个元素进行操作。例如,我们可以按照其ID分类Widget

widgets |= ranges::action::sort(std::greater<Widget::ID>{}, &Widget::getId);