ZFFramework
Loading...
Searching...
No Matches
Observer

with ZFCallback available, it's easy to use observer mechanism

public:
void test(void) {
zfobj<ZFObject> myParam0;
zfobj<ZFObject> myParam1;
this->observerNotify(
MyObject::EventMyEvent(), // event id to notify
myParam0, // param0
myParam1); // param1
}
};
static void testListener1(ZF_IN const ZFArgs &zfargs) {
<< zfargs.sender() // should be MyObject
<< zfargs.param0() // should be myParam0 passed from observerNotify
<< zfargs.param1() // should be myParam1 passed from observerNotify
;
}
static void testListener2(
ZF_IN const ZFArgs &zfargs
, ZF_IN v_zfstring *myUserData
) {
<< zfargs.sender() // should be MyObject
<< zfargs.param0() // should be myParam0 passed from observerNotify
<< zfargs.param1() // should be myParam1 passed from observerNotify
<< myUserData // should be myUserData passed from observer
;
}
#define zfextend
dummy macro shows class inherit from another
Definition ZFCoreTypeDef_ClassType.h:53
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define zfLog(...)
thread-safe log utility
Definition ZFLog.h:64
#define zfclass
same as class, shows that this class is a ZFObject type
Definition ZFObjectClassTypeFwd.h:38
#define ZFOBJECT_DECLARE(ChildClass, SuperClass)
necessary for every class inherit from ZFObject
Definition ZFObjectDeclare.h:124
#define ZFOBSERVER_EVENT(YourEvent)
see ZFObject::observerNotify
Definition ZFObjectObserver.h:262
listener data used by ZFListener
Definition ZFArgs.h:21
base class of all objects
Definition ZFObjectCore.h:214
type wrapper for ZFTypeId::Value
Definition ZFTypeId_CoreType.h:171
util class to alloc and hold ZFObject type
Definition ZFObjectAutoPtr.h:163
// the object to test observer
// the object to test user data passing
zfobj<v_zfstring> myUserData("myUserData");
// we use ZFListener as observer callback type,
// which takes two param as ZFArgs and ZFObject,
// to create it,
// use ZFCallbackForXXX series same as ZFCallback
ZFListener listener1 = ZFCallbackForFunc(testListener1);
// add an observer
obj->observerAdd(MyObject::EventMyEvent(), listener1);
// optionally, you may declare a lambda-like listener for short
// or, for extra param passing
ZFLISTENER_1(listener2
, zfautoT<v_zfstring>, myUserData
) {
testListener2(zfargs, myUserData);
obj->observerAdd(MyObject::EventMyEvent(), listener2);
// finlly we will test to notify the event
obj->test();
// or, you may notify it manually
// but it's your responsibility to ensure the passed params suit for the listener
zfobj<ZFObject> myParam0;
zfobj<ZFObject> myParam1;
obj->observerNotify(MyObject::EventMyEvent(), myParam0, myParam1);
#define ZFCallbackForFunc(callbackRawFunction)
create a callback from static function
Definition ZFCallback.h:388
#define ZFLISTENER_END()
see ZFLISTENER
Definition ZFListenerDeclare.h:17
#define ZFLISTENER_1(name, CaptureParam0, capture0)
see ZFLISTENER
Definition ZFListenerDeclare.h:69
listener as ZFCallback, mostly used by ZFObject::observerNotify
Definition ZFObjectObserver.h:30
type restrict version of zfauto
Definition zfautoFwd.h:141