是否有整洁的等同于查看成员 function/variable?
Is there and neat equivalent to view a member function/variable?
Streams library has a neat map
function to view a range by a member function. Is there any equivalent view in Range-V3?
view::transform
会是唯一的选择吗?
文章中的示例:
std::vector widgets = /* ... */
std::set ids = stream::MakeStream::from(widgets)
.map(&Widget::getId)
.to_set();
(忽略 std::vector
和 std::set
缺少的模板参数)在 ranges-v3 中将是:
std::vector<Widget> widgets = // ...
std::set<Widget::ID> ids = widgets | ranges::view::transform(&Widget::getId);
是的,transform
相当于 Streams 中的 map
。
range-v3 中的所有算法都接受 Invokable Projections 允许算法在转换的基础上 select 范围元素,但仍然对整个元素进行操作。例如,我们可以按 ID 对 Widget
进行排序:
widgets |= ranges::action::sort(std::greater<Widget::ID>{}, &Widget::getId);
Streams library has a neat map
function to view a range by a member function. Is there any equivalent view in Range-V3?
view::transform
会是唯一的选择吗?
文章中的示例:
std::vector widgets = /* ... */
std::set ids = stream::MakeStream::from(widgets)
.map(&Widget::getId)
.to_set();
(忽略 std::vector
和 std::set
缺少的模板参数)在 ranges-v3 中将是:
std::vector<Widget> widgets = // ...
std::set<Widget::ID> ids = widgets | ranges::view::transform(&Widget::getId);
是的,transform
相当于 Streams 中的 map
。
range-v3 中的所有算法都接受 Invokable Projections 允许算法在转换的基础上 select 范围元素,但仍然对整个元素进行操作。例如,我们可以按 ID 对 Widget
进行排序:
widgets |= ranges::action::sort(std::greater<Widget::ID>{}, &Widget::getId);