在 rxcpp 中创建自定义运算符
Creating custom operators in rxcpp
我正在尝试学习如何在 rxcpp 中创建自定义运算符,并且我能够创建位于此处的运算符。但是,我想学习如何创建更多实现rxo::operator_base并使用lift运算符的通用运算符。是否有任何文档可以通过一些简单的示例来学习这一点?
以下是使用 rxcpp v2 可观察提升函数的一种方法:
class MyTestOp //: public rxcpp::operators::operator_base<int>
{
public:
MyTestOp(){}
~MyTestOp(){}
rxcpp::subscriber<int> operator() (rxcpp::subscriber<int> s) const {
return rxcpp::make_subscriber<int>([s](const int & next) {
s.on_next(std::move(next + 1));
}, [&s](const std::exception_ptr & e) {
s.on_error(e);
}, [&s]() {
s.on_completed();
});
}
};
int main()
{
auto keys = rxcpp::observable<>::create<int>(
[](rxcpp::subscriber<int> dest){
for (;;) {
int key = std::cin.get();
dest.on_next(key);
}
}).
publish();
keys.lift<int>(MyTestOp()).subscribe([](int key){
std::cout << key << std::endl;
});
// same as use class
//keys.lift<int>([](rxcpp::subscriber<int> s) {
// return rxcpp::make_subscriber<int>([s](const int & next) {
// s.on_next(std::move(next + 1));
// }, [&s](const std::exception_ptr & e) {
// s.on_error(e);
// }, [&s]() {
// s.on_completed();
// });
//}).subscribe([](int key){
// std::cout << key << std::endl;
//});
// run the loop in create
keys.connect();
return 0;
}
由于它基于模板检查,因此您不需要从任何接口继承,只需像以前一样实现运算符()即可。
而且我认为作者更希望您在评论中使用这种方式。
也许我应该使用有订阅检查...无论如何。。。
if(!s.isUnsubscribed()) { /*call s.on_xxx*/ }
我发现Kirk的2016年演示文稿中的以下幻灯片非常有帮助,尽管它是关于rxcppv3而不是v2的。
序列概念
struct observable {
void bind(observer);
};
struct observer {
template<class T>
void next(T);
};
struct lifter {
observer lift(observer);
};
序列实现
const auto ints = [](auto first, auto last){
return make_observable([=](auto r){ // Define observable::bind
for(auto i = first;; ++i){
r.next(i);
if (i == last) break;
}
});
};
const auto copy_if = [](auto pred){
return make_lifter([=](auto r){
return make_observer(r, [=](auto& r, auto v){ // Define observer::next
if (pred(v)) r.next(v);
});
});
};
相关文章:
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 自定义运算符重载C++,无开销
- 如何使用C++将MXNET自定义运算符构建到单独的库/包中?
- 什么是编程语言支持定义您自己的自定义运算符?
- 在 rxcpp 中创建自定义运算符
- std::map :使用自定义运算符时更新密钥
- 如何在Tensorflow Lite中添加自定义运算符
- 如何在 rxcpp 自定义运算符中正确推断泛型
- 如何将上下文信息传递给自定义运算符<<适用于 std::iostream
- C++ 自定义运算符(+=) 的行为方式不可预测
- 尝试创建自定义<<运算符 c++
- BOOST_CHECK_EQUAL具有 pair<int、int> 和自定义运算符<<
- 将多个逗号分隔的参数传递给自定义<<运算符
- 如何使 QList<Type*> 与 indexOf() 和自定义运算符==()一起使用?
- C++ 自定义运算符新增
- 使用自定义运算符将binary_search与std::配对
- 为什么转换不适用于C++中的自定义运算符?
- 使用自定义运算符减少OpenMP SIMD
- 在命名空间中使用带有自定义运算符<<的 boost::lexical_cast
- 创建自定义运算符c++