如何解决Range-v3 是否提供 monadic 绑定功能?如果没有,我如何为管道运算符提供对自定义函数的支持?
鉴于此代码,
#include <iostream>
#include <range/v3/view/join.hpp>
#include <range/v3/view/repeat.hpp>
#include <range/v3/view/take.hpp>
#include <range/v3/view/transform.hpp>
#include <utility>
namespace rv = ranges::views;
int main() {
std::vector<int> v{0,1,2,3};
std::cout <<
(v | rv::transform([](int x){ return rv::repeat(x) | rv::take(x); })
| rv::join)
<< std::endl; // outputs [1,3,3]
}
我想有一个函数可以适当地结合 join
和 transform
来完成这项工作。如果我必须自己写,我会去
auto constexpr mbind = [](auto&& r,auto&& f){
return std::forward<decltype(r)>(r)
| rv::transform(std::forward<decltype(f)>(f))
| rv::join;
};
但这不支持 operator|
,这使得使用它的可读性稍差。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。