static int tolua_CCGUI_Subject_detach00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertype(tolua_S,1,"Subject",0,&tolua_err) || (tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"LUA_FUNCTION",0,&tolua_err)) || !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { Subject* self = (Subject*) tolua_tousertype(tolua_S,1,0); LUA_FUNCTION handler = *((LUA_FUNCTION*) tolua_tousertype(tolua_S,2,0)); #ifndef TOLUA_RELEASE if (!self) tolua_error(tolua_S,"invalid 'self' in function 'detach'", NULL); #endif { self->detach(handler); } } return 0; #ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in function 'detach'.",&tolua_err); return 0; #endif }
int main() { ObserverB ob; ObserverA oa; Subject sub; sub.attach(&ob); sub.attach(&oa); //Notify All sub.NotifyAll(); //detach ObserverA sub.detach(&oa); //Notify All sub.NotifyAll(); return 0; }
int main(int argc, char *argv[]) { Subject * subject = new ConcreteSubject(); Obeserver * objA = new ConcreteObeserver("A"); Obeserver * objB = new ConcreteObeserver("B"); subject->attach(objA); subject->attach(objB); subject->setState(1); subject->notify(); cout << "--------------------" << endl; subject->detach(objB); subject->setState(2); subject->notify(); delete subject; delete objA; delete objB; return 0; }