C++ ReactiveCocoa能否与纯c++;视图模型?

C++ ReactiveCocoa能否与纯c++;视图模型?,c++,objective-c,reactive-cocoa,C++,Objective C,Reactive Cocoa,其动机是跨平台(Android、Windows Phone)共享视图模型 例如,考虑: RAC(self.nameField,text) = RACObserve(self.viewModel, playerName); 如果self.viewModel是纯C++(11),该怎么办 显然C++没有属性,但它可以以某种方式工作吗?或者ReactiveCocoa在两侧都与Objective-C耦合(当然,在UI端耦合没有什么大不了的,因为无论如何,相关环境都必须使用一些其他绑定机制)。Reacti

其动机是跨平台(Android、Windows Phone)共享视图模型

例如,考虑:

RAC(self.nameField,text) = RACObserve(self.viewModel, playerName);
如果
self.viewModel
是纯C++(11),该怎么办


显然C++没有属性,但它可以以某种方式工作吗?或者ReactiveCocoa在两侧都与Objective-C耦合(当然,在UI端耦合没有什么大不了的,因为无论如何,相关环境都必须使用一些其他绑定机制)。

ReactiveCocoa依赖于observer模式的Cocoa式实现,这反过来又取决于Objective-C的动态调度特性

在Cocoa中,观察者通过执行类的isa swizzling(将类指针重新分配给运行时生成的子类)来工作。当属性更改时,子类重写setter方法以通知观察者的关联引用

C++由于使用静态/ VTABLE的调度方式,所以不支持这种方法拦截。因此,RealEccoCoA观测器不能工作。因此,答案基本上是否定的,RealEcceCoCOA将不能用于纯C++类,尽管可以应用基本原理,或者您可以为C++寻找RX库。 有趣的是,Swift也默认为静态/vtable分派(尽管如果扩展NSObject或使用@objc装饰,则支持动态分派)

很明显,C++没有属性,但它可以以某种方式工作?

在ObjytoC包装中包装C++对象。

或者是ReactiveCocoa在两侧都与Objective-C耦合(当然,在UI端耦合并没有什么大不了的,因为无论如何,相关环境都必须使用一些其他绑定机制)

ReactiveCocoa中的UIKit和AppKit有一些特定于UI的扩展,但库的核心完全不依赖于或不了解“UI端”,但ReactiveCocoa 2.x中的大部分功能依赖于Objective-C对象中的运行时特性


<代码> raceVelue](<代码>)只是一种方法,它最终调用了<代码> -[NSbaseRraceVelueKyPATIO:OPTION:观察员:Bue:]代码>,它本身使用了Objul-C特定的技术。C++对象不支持KVO,所以它们不在“代码”> raceCeVe()中。对于C++的RX库,> ./P> + 1,我不知道它会有什么帮助。我对库的绑定方面比它的“反应”方面更感兴趣(链接事件等)。.鉴于此,我不认为像

Rx.cpp
这样的东西会有多大帮助。不幸的是,
boost:signal
似乎也适用于此场景,它不如ReactiveCocoa,它会自动生成事件以更改viewmodel属性,并使用
RAC将视图属性绑定到viewmodel
,并附带用于UI控件的内置信号,如
rac\u textSignal
boost::signal
是信号和插槽()的实现这与C++的RealEctuoCa和其他RX框架中的信号/观测值无关,因为COCOA风格的观察者依赖于方法拦截,也许实现C++中拦截的最好的方法是使用AOP库。由于C++的静态调度性质,这在编译之前使用预处理器产生新的源。虽然这样,你可以使用同样的透明绑定。虽然Cococa不使用AOP和AOP,但是在方法拦截的顶部引入了“切入点”的概念,它的方法拦截部分很重要,C++中的一个很好的方法就是用Aop.PS:上面的评论是指如果你想“自己滚”的解决方案。Oracle像可可观察员…你可以使用AOP来拦截。不确定C++ RXILBS是否已经使用预编译或一些东西来获得这种透明样式绑定。@ OdHaSnEdEd,是的,我想你没有时间一路走到自己的滚动,尽管我想知道透明绑定如何在C++中工作,并认为它是WOU。这会引起有趣的旁白讨论/评论。