【发布时间】:2019-12-05 20:41:09
【问题描述】:
所以我已经尝试将 ReactiveX 理解为一个库有一段时间了,我相信我已经开始掌握基础知识了,但是,我遇到了一个问题,我找不到解决方案在文档中...
tldr: 我想将一个可观察对象连接到一个类,而无需在可观察 lambda 中实际创建该类,或者,在可观察对象中创建该类,然后能够提取该类。最后,我只想以某种方式或形式制作一个类的可观察对象,然后能够在可观察对象范围之外使用该类。
情况: 我有三层类,我有 A、B 和 C 类,其中 A 包含在所有 B 中,后来所有 B 包含在多个 C 中。 B 类和 C 类都可能存在于多个实例中(A 总是只有一个实例)。
问题: 所以在我的应用程序中,A 类将创建 C 的一个实例,并使用 Rx 使其可观察。当 C 被实例化并准备好时,我想获取该类并将其传递给 B 实例之一。但是,我的问题是,由于我需要在 observable create 方法中的 lambda 中创建 C 类,因此我实际上无法对新的 C 类做任何事情,它只存在于 lambda 范围内。所以我想要做的是将 C 的引用传递给 observable 并将其提供给订阅者,或者以某种方式从 observable lambda 中返回 C 实例。我尝试给 lambda 一个指向我的类的指针并使 lambda 可变,但是这样做时 rx 给了我编译错误并抱怨 Rx 方法是 const。
const auto test = rx::observable<>::create<something>([&](rx::subscriber<something> subscriber) {
C c(subscriber);
});
// Here I want to access c
我尝试像这样传递它但没有成功
class C {
C(rx::subscriber<someting> subscriber) {
subscriber.on_next(55);
}
};
C* c = nullptr;
const auto test = rx::observable<>::create<something>([cLambda = c](rx::subscriber<something> subscriber) mutable {
cLambda = new C(subscriber);
});
test.subscribe([](something input) {
std::cout << "Called " << input<< std::endl;
});
// Compile error: C3848: expression having type 'const main::<lambda_d3f00...>' would lose some const-volatile qualifiers in order to call 'void main::<lambda_d3f00...>::operator ()(rxcpp::subscriber<something,rxcpp::observer<T,void,void,void,void>>)'
// with
// [
// T=container
// ]
是否存在任何其他方法来完成我想要的,或者我只是误解了这里的某些东西的概念?
【问题讨论】:
标签: c++ system.reactive reactivex rxcpp