enum _CNULL { CNULL }; template inline D brutal_cast(const S& source) { return *(D *)&source; } #include "Cbgen.h" #include "Callback0.h" #include "Callback1.h" #include "Callback2.h" #include "Callback3.h" #include "Callback4.h" #define THISBACK(x) callback(this, &CLASSNAME::x) #define THISBACK1(x, arg) callback1(this, &CLASSNAME::x, arg) #define THISBACK2(m, a, b) callback2(this, &CLASSNAME::m, a, b) #define THISBACK3(m, a, b, c) callback3(this, &CLASSNAME::m, a, b, c) #define THISBACK4(m, a, b, c, d) callback4(this, &CLASSNAME::m, a, b, c, d) #define PTEBACK(x) pteback(this, &CLASSNAME::x) #define PTEBACK1(x, arg) pteback1(this, &CLASSNAME::x, arg) #define PTEBACK2(m, a, b) pteback2(this, &CLASSNAME::m, a, b) #define PTEBACK3(m, a, b, c) pteback3(this, &CLASSNAME::m, a, b, c) #define PTEBACK4(m, a, b, c, d) pteback4(this, &CLASSNAME::m, a, b, c, d) #define STDBACK(x) callback(&x) #define STDBACK1(x, arg) callback1(&x, arg) #define STDBACK2(m, a, b) callback2(&m, a, b) #define STDBACK3(m, a, b, c) callback3(&m, a, b, c) #define STDBACK4(m, a, b, c, d) callback4(&m, a, b, c, d) template class CallbackArgTarget { T result; void SetResult(const T& value) { result = value; } void Set(T value) { result = value; } public: typedef CallbackArgTarget CLASSNAME; operator const T&() const { return result; } bool IsNullInstance() const { return IsNull(result); } Callback operator[](const T& value) { return THISBACK1(SetResult, value); } operator Callback1() { return THISBACK(SetResult); } operator Callback1() { return THISBACK(Set); } CallbackArgTarget() { result = Null; } };