ZFFramework
Loading...
Searching...
No Matches
ZFObjectDeclare.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_ZFObjectDeclare_h_
7#define _ZFI_ZFObjectDeclare_h_
8
9#include "zfany.h"
11
12// ============================================================
13template<typename T_zfsuper, typename T_superInterface, int superImplementInterface>
14zfclassNotPOD _ZFP_zfsuperI {
15public:
16 typedef T_superInterface SuperType;
17};
18template<typename T_zfsuper, typename T_superInterface>
19zfclassNotPOD _ZFP_zfsuperI<T_zfsuper, T_superInterface, 1> {
20public:
21 typedef T_zfsuper SuperType;
22};
26#define zfsuperI(T_SuperType) \
27 _ZFP_zfsuperI<zfsuper, T_SuperType, zftIsTypeOf<zfsuper, T_SuperType>::Value>::SuperType
28
29// ============================================================
30#define _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
31 protected: \
32 \
33 ChildClass(void) : SuperClass() {} \
34 virtual ~ChildClass(void) {} \
35 \
36 public:
37#define _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
38 ZFCLASS_DISALLOW_COPY_CONSTRUCTOR(ChildClass) \
39 public: \
40 static void _ZFP_zftIsZFObject(void) {} \
41 protected: \
42 \
43 typedef SuperClass zfsuper; \
44 \
45 typedef ChildClass zfself; \
46 public: \
47 \
48 template<typename T_ZFObject> \
49 inline T_ZFObject to(void) { \
50 return zfcast(T_ZFObject, this); \
51 } \
52 virtual inline ZFObject *toObject(void) { \
53 return this; \
54 } \
55 \
56 public: \
57 \
58 virtual inline const ZFClass *classData(void) { \
59 return this->classDynamic() ? this->classDynamic() : zfself::ClassData(); \
60 } \
61 private: \
62 static void _ZFP_ObjI_regCk(ZF_IN ZFClass *cls) { \
63 if(!cls->_ZFP_ZFClass_interfaceHasRegisterCk()) { \
64 cls->_ZFP_ZFClass_interfaceHasRegisterCk(zftrue); \
65 if(zfself::_ZFP_ObjI_reg != zfsuper::_ZFP_ObjI_reg) { \
66 zfself::_ZFP_ObjI_reg(cls); \
67 } \
68 } \
69 } \
70 public:
71#define _ZFP_ZFOBJECT_DECLARE_OBJECT(ChildClass, SuperClass, OuterClass, ...) \
72 public: \
73 enum {_ZFP_ZFObjectCanAlloc = 1}; \
74 public: \
75 zfpoolDeclareFriend() \
76 friend zfclassFwd _ZFP_ObjACk<zfself, 0>; \
77 friend zfclassFwd _ZFP_ObjACk<zfself, 1>; \
78 static ZFObject *_ZFP_Obj_ctor(void) { \
79 return zfpoolNew(zfself); \
80 } \
81 static void _ZFP_Obj_dtor(ZF_IN ZFObject *obj) { \
82 zfpoolDelete(_ZFP_ObjCastInternal(zfself *, obj)); \
83 } \
84 \
85 static const ZFClass *ClassData(void) { \
86 static _ZFP_ZFClassRegisterHolder h( \
87 ZF_NAMESPACE_CURRENT(), \
88 zftext(#ChildClass), \
89 zfsuper::ClassData(), \
90 OuterClass::ClassData(), \
91 (zfself::_ZFP_ZFObjectCanAllocPublic != 0), \
92 (&zfself::_ZFP_ObjACIvk != &zfsuper::_ZFP_ObjACIvk) \
93 ? &zfself::_ZFP_ObjACIvk \
94 : zfnull, \
95 &zfself::_ZFP_Obj_ctor, \
96 &zfself::_ZFP_Obj_dtor, \
97 &zfself::_ZFP_ObjI_regCk \
98 ); \
99 return h.cls; \
100 }
101#define _ZFP_ZFOBJECT_DECLARE_ABSTRACT(ChildClass, SuperClass, OuterClass, ...) \
102 public: \
103 typedef enum {_ZFP_ZFObjectCanAlloc = 0} _ZFP_ZFObjectCanAllocChecker; \
104 public: \
105 \
106 static const ZFClass *ClassData(void) { \
107 static _ZFP_ZFClassRegisterHolder h( \
108 ZF_NAMESPACE_CURRENT(), \
109 zftext(#ChildClass), \
110 zfsuper::ClassData(), \
111 OuterClass::ClassData(), \
112 (zfself::_ZFP_ZFObjectCanAllocPublic != 0), \
113 zfnull, \
114 zfnull, \
115 zfnull, \
116 &zfself::_ZFP_ObjI_regCk \
117 ); \
118 return h.cls; \
119 }
126#define ZFOBJECT_DECLARE(ChildClass, SuperClass, ...) \
127 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
128 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_OBJECT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
129 _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
130 public:
131
142#define ZFOBJECT_DECLARE_WITH_CUSTOM_CTOR(ChildClass, SuperClass, ...) \
143 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
144 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_OBJECT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
145 public:
146
152#define ZFOBJECT_DECLARE_ABSTRACT(ChildClass, SuperClass, ...) \
153 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
154 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_ABSTRACT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
155 _ZFP_ZFOBJECT_DECLARE_PROTECTED_CONSTRUCTOR(ChildClass, SuperClass) \
156 public:
157
160#define ZFOBJECT_DECLARE_ABSTRACT_WITH_CUSTOM_CTOR(ChildClass, SuperClass, ...) \
161 _ZFP_ZFOBJECT_DECLARE(ChildClass, SuperClass) \
162 ZFM_VA_APPEND(_ZFP_ZFOBJECT_DECLARE_ABSTRACT, _ZFP_Obj_Base, ChildClass, SuperClass, ##__VA_ARGS__) \
163 public:
164
209#define ZFOBJECT_REGISTER(T_ZFObject, ...) \
210 _ZFP_ZFOBJECT_REGISTER( \
211 _ZFP_ZFOBJECT_REGISTER_regSig(ZFM_PARAM_NUM(T_ZFObject, ##__VA_ARGS__), T_ZFObject, ##__VA_ARGS__), \
212 ZFM_FIX_PARAM(_ZFP_ZFOBJECT_REGISTER_clsSig_EXPAND, ZFM_EMPTY, T_ZFObject, ##__VA_ARGS__) \
213 )
214#define _ZFP_ZFOBJECT_REGISTER(regSig, clsSig) \
215 _ZFP_ZFOBJECT_REGISTER_(regSig, clsSig)
216#define _ZFP_ZFOBJECT_REGISTER_(regSig, clsSig) \
217 ZF_STATIC_REGISTER_INIT(regSig) { \
218 clsSig ClassData()/* ->_ZFP_ZFClass_autoRegister() */; \
219 } \
220 ZF_STATIC_REGISTER_END(regSig)
221
222#define _ZFP_ZFOBJECT_REGISTER_regSig_1(T0) ObjR_##T0
223#define _ZFP_ZFOBJECT_REGISTER_regSig_2(T0, T1) ObjR_##T0##_##T1
224#define _ZFP_ZFOBJECT_REGISTER_regSig_3(T0, T1, T2) ObjR_##T0##_##T1##_##T2
225#define _ZFP_ZFOBJECT_REGISTER_regSig_4(T0, T1, T2, T3) ObjR_##T0##_##T1##_##T2##_##T3
226#define _ZFP_ZFOBJECT_REGISTER_regSig_(N, T, ...) _ZFP_ZFOBJECT_REGISTER_regSig_##N(T, ##__VA_ARGS__)
227#define _ZFP_ZFOBJECT_REGISTER_regSig(N, T, ...) _ZFP_ZFOBJECT_REGISTER_regSig_(N, T, ##__VA_ARGS__)
228
229#define _ZFP_ZFOBJECT_REGISTER_clsSig_EXPAND(T) T::
230
245#define ZFOBJECT_PRIVATE_ALLOC(...) \
246 public: \
247 enum {_ZFP_ZFObjectCanAllocPublic = 0}; \
248 protected:
249
250// ============================================================
254#define ZFOBJECT_ON_INIT_INLINE_1( \
255 ZFMP_0 \
256 ) \
257 ZFMETHOD_INLINE_DETAIL_1( \
258 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
259 void, objectOnInit \
260 , _ZFP_mP_EXPAND(ZFMP_0) \
261 )
263#define ZFOBJECT_ON_INIT_DECLARE_1( \
264 ZFMP_0 \
265 ) \
266 ZFMETHOD_DECLARE_DETAIL_1( \
267 protected, ZFMethodTypeVirtual, \
268 void, objectOnInit \
269 , _ZFP_mP_EXPAND(ZFMP_0) \
270 )
272#define ZFOBJECT_ON_INIT_DEFINE_1(OwnerClass \
273 , ZFMP_0 \
274 ) \
275 ZFMETHOD_DEFINE_1(OwnerClass, void, objectOnInit \
276 , _ZFP_mP_EXPAND(ZFMP_0) \
277 )
279#define ZFOBJECT_ON_INIT_INLINE_2( \
280 ZFMP_0 \
281 , ZFMP_1 \
282 ) \
283 ZFMETHOD_INLINE_DETAIL_2( \
284 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
285 void, objectOnInit \
286 , _ZFP_mP_EXPAND(ZFMP_0) \
287 , _ZFP_mP_EXPAND(ZFMP_1) \
288 )
290#define ZFOBJECT_ON_INIT_DECLARE_2( \
291 ZFMP_0 \
292 , ZFMP_1 \
293 ) \
294 ZFMETHOD_DECLARE_DETAIL_2( \
295 protected, ZFMethodTypeVirtual, \
296 void, objectOnInit \
297 , _ZFP_mP_EXPAND(ZFMP_0) \
298 , _ZFP_mP_EXPAND(ZFMP_1) \
299 )
301#define ZFOBJECT_ON_INIT_DEFINE_2(OwnerClass \
302 , ZFMP_0 \
303 , ZFMP_1 \
304 ) \
305 ZFMETHOD_DEFINE_2(OwnerClass, void, objectOnInit \
306 , _ZFP_mP_EXPAND(ZFMP_0) \
307 , _ZFP_mP_EXPAND(ZFMP_1) \
308 )
310#define ZFOBJECT_ON_INIT_INLINE_3( \
311 ZFMP_0 \
312 , ZFMP_1 \
313 , ZFMP_2 \
314 ) \
315 ZFMETHOD_INLINE_DETAIL_3( \
316 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
317 void, objectOnInit \
318 , _ZFP_mP_EXPAND(ZFMP_0) \
319 , _ZFP_mP_EXPAND(ZFMP_1) \
320 , _ZFP_mP_EXPAND(ZFMP_2) \
321 )
323#define ZFOBJECT_ON_INIT_DECLARE_3( \
324 ZFMP_0 \
325 , ZFMP_1 \
326 , ZFMP_2 \
327 ) \
328 ZFMETHOD_DECLARE_DETAIL_3( \
329 protected, ZFMethodTypeVirtual, \
330 void, objectOnInit \
331 , _ZFP_mP_EXPAND(ZFMP_0) \
332 , _ZFP_mP_EXPAND(ZFMP_1) \
333 , _ZFP_mP_EXPAND(ZFMP_2) \
334 )
336#define ZFOBJECT_ON_INIT_DEFINE_3(OwnerClass \
337 , ZFMP_0 \
338 , ZFMP_1 \
339 , ZFMP_2 \
340 ) \
341 ZFMETHOD_DEFINE_3(OwnerClass, void, objectOnInit \
342 , _ZFP_mP_EXPAND(ZFMP_0) \
343 , _ZFP_mP_EXPAND(ZFMP_1) \
344 , _ZFP_mP_EXPAND(ZFMP_2) \
345 )
347#define ZFOBJECT_ON_INIT_INLINE_4( \
348 ZFMP_0 \
349 , ZFMP_1 \
350 , ZFMP_2 \
351 , ZFMP_3 \
352 ) \
353 ZFMETHOD_INLINE_DETAIL_4( \
354 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
355 void, objectOnInit \
356 , _ZFP_mP_EXPAND(ZFMP_0) \
357 , _ZFP_mP_EXPAND(ZFMP_1) \
358 , _ZFP_mP_EXPAND(ZFMP_2) \
359 , _ZFP_mP_EXPAND(ZFMP_3) \
360 )
362#define ZFOBJECT_ON_INIT_DECLARE_4( \
363 ZFMP_0 \
364 , ZFMP_1 \
365 , ZFMP_2 \
366 , ZFMP_3 \
367 ) \
368 ZFMETHOD_DECLARE_DETAIL_4( \
369 protected, ZFMethodTypeVirtual, \
370 void, objectOnInit \
371 , _ZFP_mP_EXPAND(ZFMP_0) \
372 , _ZFP_mP_EXPAND(ZFMP_1) \
373 , _ZFP_mP_EXPAND(ZFMP_2) \
374 , _ZFP_mP_EXPAND(ZFMP_3) \
375 )
377#define ZFOBJECT_ON_INIT_DEFINE_4(OwnerClass \
378 , ZFMP_0 \
379 , ZFMP_1 \
380 , ZFMP_2 \
381 , ZFMP_3 \
382 ) \
383 ZFMETHOD_DEFINE_4(OwnerClass, void, objectOnInit \
384 , _ZFP_mP_EXPAND(ZFMP_0) \
385 , _ZFP_mP_EXPAND(ZFMP_1) \
386 , _ZFP_mP_EXPAND(ZFMP_2) \
387 , _ZFP_mP_EXPAND(ZFMP_3) \
388 )
390#define ZFOBJECT_ON_INIT_INLINE_5( \
391 ZFMP_0 \
392 , ZFMP_1 \
393 , ZFMP_2 \
394 , ZFMP_3 \
395 , ZFMP_4 \
396 ) \
397 ZFMETHOD_INLINE_DETAIL_5( \
398 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
399 void, objectOnInit \
400 , _ZFP_mP_EXPAND(ZFMP_0) \
401 , _ZFP_mP_EXPAND(ZFMP_1) \
402 , _ZFP_mP_EXPAND(ZFMP_2) \
403 , _ZFP_mP_EXPAND(ZFMP_3) \
404 , _ZFP_mP_EXPAND(ZFMP_4) \
405 )
407#define ZFOBJECT_ON_INIT_DECLARE_5( \
408 ZFMP_0 \
409 , ZFMP_1 \
410 , ZFMP_2 \
411 , ZFMP_3 \
412 , ZFMP_4 \
413 ) \
414 ZFMETHOD_DECLARE_DETAIL_5( \
415 protected, ZFMethodTypeVirtual, \
416 void, objectOnInit \
417 , _ZFP_mP_EXPAND(ZFMP_0) \
418 , _ZFP_mP_EXPAND(ZFMP_1) \
419 , _ZFP_mP_EXPAND(ZFMP_2) \
420 , _ZFP_mP_EXPAND(ZFMP_3) \
421 , _ZFP_mP_EXPAND(ZFMP_4) \
422 )
424#define ZFOBJECT_ON_INIT_DEFINE_5(OwnerClass \
425 , ZFMP_0 \
426 , ZFMP_1 \
427 , ZFMP_2 \
428 , ZFMP_3 \
429 , ZFMP_4 \
430 ) \
431 ZFMETHOD_DEFINE_5(OwnerClass, void, objectOnInit \
432 , _ZFP_mP_EXPAND(ZFMP_0) \
433 , _ZFP_mP_EXPAND(ZFMP_1) \
434 , _ZFP_mP_EXPAND(ZFMP_2) \
435 , _ZFP_mP_EXPAND(ZFMP_3) \
436 , _ZFP_mP_EXPAND(ZFMP_4) \
437 )
439#define ZFOBJECT_ON_INIT_INLINE_6( \
440 ZFMP_0 \
441 , ZFMP_1 \
442 , ZFMP_2 \
443 , ZFMP_3 \
444 , ZFMP_4 \
445 , ZFMP_5 \
446 ) \
447 ZFMETHOD_INLINE_DETAIL_6( \
448 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
449 void, objectOnInit \
450 , _ZFP_mP_EXPAND(ZFMP_0) \
451 , _ZFP_mP_EXPAND(ZFMP_1) \
452 , _ZFP_mP_EXPAND(ZFMP_2) \
453 , _ZFP_mP_EXPAND(ZFMP_3) \
454 , _ZFP_mP_EXPAND(ZFMP_4) \
455 , _ZFP_mP_EXPAND(ZFMP_5) \
456 )
458#define ZFOBJECT_ON_INIT_DECLARE_6( \
459 ZFMP_0 \
460 , ZFMP_1 \
461 , ZFMP_2 \
462 , ZFMP_3 \
463 , ZFMP_4 \
464 , ZFMP_5 \
465 ) \
466 ZFMETHOD_DECLARE_DETAIL_6( \
467 protected, ZFMethodTypeVirtual, \
468 void, objectOnInit \
469 , _ZFP_mP_EXPAND(ZFMP_0) \
470 , _ZFP_mP_EXPAND(ZFMP_1) \
471 , _ZFP_mP_EXPAND(ZFMP_2) \
472 , _ZFP_mP_EXPAND(ZFMP_3) \
473 , _ZFP_mP_EXPAND(ZFMP_4) \
474 , _ZFP_mP_EXPAND(ZFMP_5) \
475 )
477#define ZFOBJECT_ON_INIT_DEFINE_6(OwnerClass \
478 , ZFMP_0 \
479 , ZFMP_1 \
480 , ZFMP_2 \
481 , ZFMP_3 \
482 , ZFMP_4 \
483 , ZFMP_5 \
484 ) \
485 ZFMETHOD_DEFINE_6(OwnerClass, void, objectOnInit \
486 , _ZFP_mP_EXPAND(ZFMP_0) \
487 , _ZFP_mP_EXPAND(ZFMP_1) \
488 , _ZFP_mP_EXPAND(ZFMP_2) \
489 , _ZFP_mP_EXPAND(ZFMP_3) \
490 , _ZFP_mP_EXPAND(ZFMP_4) \
491 , _ZFP_mP_EXPAND(ZFMP_5) \
492 )
494#define ZFOBJECT_ON_INIT_INLINE_7( \
495 ZFMP_0 \
496 , ZFMP_1 \
497 , ZFMP_2 \
498 , ZFMP_3 \
499 , ZFMP_4 \
500 , ZFMP_5 \
501 , ZFMP_6 \
502 ) \
503 ZFMETHOD_INLINE_DETAIL_7( \
504 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
505 void, objectOnInit \
506 , _ZFP_mP_EXPAND(ZFMP_0) \
507 , _ZFP_mP_EXPAND(ZFMP_1) \
508 , _ZFP_mP_EXPAND(ZFMP_2) \
509 , _ZFP_mP_EXPAND(ZFMP_3) \
510 , _ZFP_mP_EXPAND(ZFMP_4) \
511 , _ZFP_mP_EXPAND(ZFMP_5) \
512 , _ZFP_mP_EXPAND(ZFMP_6) \
513 )
515#define ZFOBJECT_ON_INIT_DECLARE_7( \
516 ZFMP_0 \
517 , ZFMP_1 \
518 , ZFMP_2 \
519 , ZFMP_3 \
520 , ZFMP_4 \
521 , ZFMP_5 \
522 , ZFMP_6 \
523 ) \
524 ZFMETHOD_DECLARE_DETAIL_7( \
525 protected, ZFMethodTypeVirtual, \
526 void, objectOnInit \
527 , _ZFP_mP_EXPAND(ZFMP_0) \
528 , _ZFP_mP_EXPAND(ZFMP_1) \
529 , _ZFP_mP_EXPAND(ZFMP_2) \
530 , _ZFP_mP_EXPAND(ZFMP_3) \
531 , _ZFP_mP_EXPAND(ZFMP_4) \
532 , _ZFP_mP_EXPAND(ZFMP_5) \
533 , _ZFP_mP_EXPAND(ZFMP_6) \
534 )
536#define ZFOBJECT_ON_INIT_DEFINE_7(OwnerClass \
537 , ZFMP_0 \
538 , ZFMP_1 \
539 , ZFMP_2 \
540 , ZFMP_3 \
541 , ZFMP_4 \
542 , ZFMP_5 \
543 , ZFMP_6 \
544 ) \
545 ZFMETHOD_DEFINE_7(OwnerClass, void, objectOnInit \
546 , _ZFP_mP_EXPAND(ZFMP_0) \
547 , _ZFP_mP_EXPAND(ZFMP_1) \
548 , _ZFP_mP_EXPAND(ZFMP_2) \
549 , _ZFP_mP_EXPAND(ZFMP_3) \
550 , _ZFP_mP_EXPAND(ZFMP_4) \
551 , _ZFP_mP_EXPAND(ZFMP_5) \
552 , _ZFP_mP_EXPAND(ZFMP_6) \
553 )
555#define ZFOBJECT_ON_INIT_INLINE_8( \
556 ZFMP_0 \
557 , ZFMP_1 \
558 , ZFMP_2 \
559 , ZFMP_3 \
560 , ZFMP_4 \
561 , ZFMP_5 \
562 , ZFMP_6 \
563 , ZFMP_7 \
564 ) \
565 ZFMETHOD_INLINE_DETAIL_8( \
566 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
567 void, objectOnInit \
568 , _ZFP_mP_EXPAND(ZFMP_0) \
569 , _ZFP_mP_EXPAND(ZFMP_1) \
570 , _ZFP_mP_EXPAND(ZFMP_2) \
571 , _ZFP_mP_EXPAND(ZFMP_3) \
572 , _ZFP_mP_EXPAND(ZFMP_4) \
573 , _ZFP_mP_EXPAND(ZFMP_5) \
574 , _ZFP_mP_EXPAND(ZFMP_6) \
575 , _ZFP_mP_EXPAND(ZFMP_7) \
576 )
578#define ZFOBJECT_ON_INIT_DECLARE_8( \
579 ZFMP_0 \
580 , ZFMP_1 \
581 , ZFMP_2 \
582 , ZFMP_3 \
583 , ZFMP_4 \
584 , ZFMP_5 \
585 , ZFMP_6 \
586 , ZFMP_7 \
587 ) \
588 ZFMETHOD_DECLARE_DETAIL_8( \
589 protected, ZFMethodTypeVirtual, \
590 void, objectOnInit \
591 , _ZFP_mP_EXPAND(ZFMP_0) \
592 , _ZFP_mP_EXPAND(ZFMP_1) \
593 , _ZFP_mP_EXPAND(ZFMP_2) \
594 , _ZFP_mP_EXPAND(ZFMP_3) \
595 , _ZFP_mP_EXPAND(ZFMP_4) \
596 , _ZFP_mP_EXPAND(ZFMP_5) \
597 , _ZFP_mP_EXPAND(ZFMP_6) \
598 , _ZFP_mP_EXPAND(ZFMP_7) \
599 )
601#define ZFOBJECT_ON_INIT_DEFINE_8(OwnerClass \
602 , ZFMP_0 \
603 , ZFMP_1 \
604 , ZFMP_2 \
605 , ZFMP_3 \
606 , ZFMP_4 \
607 , ZFMP_5 \
608 , ZFMP_6 \
609 , ZFMP_7 \
610 ) \
611 ZFMETHOD_DEFINE_8(OwnerClass, void, objectOnInit \
612 , _ZFP_mP_EXPAND(ZFMP_0) \
613 , _ZFP_mP_EXPAND(ZFMP_1) \
614 , _ZFP_mP_EXPAND(ZFMP_2) \
615 , _ZFP_mP_EXPAND(ZFMP_3) \
616 , _ZFP_mP_EXPAND(ZFMP_4) \
617 , _ZFP_mP_EXPAND(ZFMP_5) \
618 , _ZFP_mP_EXPAND(ZFMP_6) \
619 , _ZFP_mP_EXPAND(ZFMP_7) \
620 )
621
622// ============================================================
626#define ZFOBJECT_ON_INIT_USER_REGISTER_1(ownerClassSig \
627 , ZFMP_0 \
628 ) \
629 ZFMETHOD_USER_REGISTER_DETAIL_1(ownerClassSig, \
630 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
631 void, objectOnInit \
632 , _ZFP_mP_EXPAND(ZFMP_0) \
633 )
635#define ZFOBJECT_ON_INIT_USER_REGISTER_2(ownerClassSig \
636 , ZFMP_0 \
637 , ZFMP_1 \
638 ) \
639 ZFMETHOD_USER_REGISTER_DETAIL_2(ownerClassSig, \
640 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
641 void, objectOnInit \
642 , _ZFP_mP_EXPAND(ZFMP_0) \
643 , _ZFP_mP_EXPAND(ZFMP_1) \
644 )
646#define ZFOBJECT_ON_INIT_USER_REGISTER_3(ownerClassSig \
647 , ZFMP_0 \
648 , ZFMP_1 \
649 , ZFMP_2 \
650 ) \
651 ZFMETHOD_USER_REGISTER_DETAIL_3(ownerClassSig, \
652 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
653 void, objectOnInit \
654 , _ZFP_mP_EXPAND(ZFMP_0) \
655 , _ZFP_mP_EXPAND(ZFMP_1) \
656 , _ZFP_mP_EXPAND(ZFMP_2) \
657 )
659#define ZFOBJECT_ON_INIT_USER_REGISTER_4(ownerClassSig \
660 , ZFMP_0 \
661 , ZFMP_1 \
662 , ZFMP_2 \
663 , ZFMP_3 \
664 ) \
665 ZFMETHOD_USER_REGISTER_DETAIL_4(ownerClassSig, \
666 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
667 void, objectOnInit \
668 , _ZFP_mP_EXPAND(ZFMP_0) \
669 , _ZFP_mP_EXPAND(ZFMP_1) \
670 , _ZFP_mP_EXPAND(ZFMP_2) \
671 , _ZFP_mP_EXPAND(ZFMP_3) \
672 )
674#define ZFOBJECT_ON_INIT_USER_REGISTER_5(ownerClassSig \
675 , ZFMP_0 \
676 , ZFMP_1 \
677 , ZFMP_2 \
678 , ZFMP_3 \
679 , ZFMP_4 \
680 ) \
681 ZFMETHOD_USER_REGISTER_DETAIL_5(ownerClassSig, \
682 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
683 void, objectOnInit \
684 , _ZFP_mP_EXPAND(ZFMP_0) \
685 , _ZFP_mP_EXPAND(ZFMP_1) \
686 , _ZFP_mP_EXPAND(ZFMP_2) \
687 , _ZFP_mP_EXPAND(ZFMP_3) \
688 , _ZFP_mP_EXPAND(ZFMP_4) \
689 )
691#define ZFOBJECT_ON_INIT_USER_REGISTER_6(ownerClassSig \
692 , ZFMP_0 \
693 , ZFMP_1 \
694 , ZFMP_2 \
695 , ZFMP_3 \
696 , ZFMP_4 \
697 , ZFMP_5 \
698 ) \
699 ZFMETHOD_USER_REGISTER_DETAIL_6(ownerClassSig, \
700 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
701 void, objectOnInit \
702 , _ZFP_mP_EXPAND(ZFMP_0) \
703 , _ZFP_mP_EXPAND(ZFMP_1) \
704 , _ZFP_mP_EXPAND(ZFMP_2) \
705 , _ZFP_mP_EXPAND(ZFMP_3) \
706 , _ZFP_mP_EXPAND(ZFMP_4) \
707 , _ZFP_mP_EXPAND(ZFMP_5) \
708 )
710#define ZFOBJECT_ON_INIT_USER_REGISTER_7(ownerClassSig \
711 , ZFMP_0 \
712 , ZFMP_1 \
713 , ZFMP_2 \
714 , ZFMP_3 \
715 , ZFMP_4 \
716 , ZFMP_5 \
717 , ZFMP_6 \
718 ) \
719 ZFMETHOD_USER_REGISTER_DETAIL_7(ownerClassSig, \
720 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
721 void, objectOnInit \
722 , _ZFP_mP_EXPAND(ZFMP_0) \
723 , _ZFP_mP_EXPAND(ZFMP_1) \
724 , _ZFP_mP_EXPAND(ZFMP_2) \
725 , _ZFP_mP_EXPAND(ZFMP_3) \
726 , _ZFP_mP_EXPAND(ZFMP_4) \
727 , _ZFP_mP_EXPAND(ZFMP_5) \
728 , _ZFP_mP_EXPAND(ZFMP_6) \
729 )
731#define ZFOBJECT_ON_INIT_USER_REGISTER_8(ownerClassSig \
732 , ZFMP_0 \
733 , ZFMP_1 \
734 , ZFMP_2 \
735 , ZFMP_3 \
736 , ZFMP_4 \
737 , ZFMP_5 \
738 , ZFMP_6 \
739 , ZFMP_7 \
740 ) \
741 ZFMETHOD_USER_REGISTER_DETAIL_8(ownerClassSig, \
742 protected, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
743 void, objectOnInit \
744 , _ZFP_mP_EXPAND(ZFMP_0) \
745 , _ZFP_mP_EXPAND(ZFMP_1) \
746 , _ZFP_mP_EXPAND(ZFMP_2) \
747 , _ZFP_mP_EXPAND(ZFMP_3) \
748 , _ZFP_mP_EXPAND(ZFMP_4) \
749 , _ZFP_mP_EXPAND(ZFMP_5) \
750 , _ZFP_mP_EXPAND(ZFMP_6) \
751 , _ZFP_mP_EXPAND(ZFMP_7) \
752 )
753
754// ============================================================
758#define ZFObjectOnInitUserRegister_1(resultMethod, methodInvokerAction, ownerClass \
759 , ZFMP_0 \
760 ) \
761 ZFMethodUserRegisterDetail_1(resultMethod, { \
762 methodInvokerAction \
763 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
764 , _ZFP_mP_EXPAND(ZFMP_0) \
765 )
767#define ZFObjectOnInitUserRegister_2(resultMethod, methodInvokerAction, ownerClass \
768 , ZFMP_0 \
769 , ZFMP_1 \
770 ) \
771 ZFMethodUserRegisterDetail_2(resultMethod, { \
772 methodInvokerAction \
773 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
774 , _ZFP_mP_EXPAND(ZFMP_0) \
775 , _ZFP_mP_EXPAND(ZFMP_1) \
776 )
778#define ZFObjectOnInitUserRegister_3(resultMethod, methodInvokerAction, ownerClass \
779 , ZFMP_0 \
780 , ZFMP_1 \
781 , ZFMP_2 \
782 ) \
783 ZFMethodUserRegisterDetail_3(resultMethod, { \
784 methodInvokerAction \
785 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
786 , _ZFP_mP_EXPAND(ZFMP_0) \
787 , _ZFP_mP_EXPAND(ZFMP_1) \
788 , _ZFP_mP_EXPAND(ZFMP_2) \
789 )
791#define ZFObjectOnInitUserRegister_4(resultMethod, methodInvokerAction, ownerClass \
792 , ZFMP_0 \
793 , ZFMP_1 \
794 , ZFMP_2 \
795 , ZFMP_3 \
796 ) \
797 ZFMethodUserRegisterDetail_4(resultMethod, { \
798 methodInvokerAction \
799 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
800 , _ZFP_mP_EXPAND(ZFMP_0) \
801 , _ZFP_mP_EXPAND(ZFMP_1) \
802 , _ZFP_mP_EXPAND(ZFMP_2) \
803 , _ZFP_mP_EXPAND(ZFMP_3) \
804 )
806#define ZFObjectOnInitUserRegister_5(resultMethod, methodInvokerAction, ownerClass \
807 , ZFMP_0 \
808 , ZFMP_1 \
809 , ZFMP_2 \
810 , ZFMP_3 \
811 , ZFMP_4 \
812 ) \
813 ZFMethodUserRegisterDetail_5(resultMethod, { \
814 methodInvokerAction \
815 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
816 , _ZFP_mP_EXPAND(ZFMP_0) \
817 , _ZFP_mP_EXPAND(ZFMP_1) \
818 , _ZFP_mP_EXPAND(ZFMP_2) \
819 , _ZFP_mP_EXPAND(ZFMP_3) \
820 , _ZFP_mP_EXPAND(ZFMP_4) \
821 )
823#define ZFObjectOnInitUserRegister_6(resultMethod, methodInvokerAction, ownerClass \
824 , ZFMP_0 \
825 , ZFMP_1 \
826 , ZFMP_2 \
827 , ZFMP_3 \
828 , ZFMP_4 \
829 , ZFMP_5 \
830 ) \
831 ZFMethodUserRegisterDetail_6(resultMethod, { \
832 methodInvokerAction \
833 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
834 , _ZFP_mP_EXPAND(ZFMP_0) \
835 , _ZFP_mP_EXPAND(ZFMP_1) \
836 , _ZFP_mP_EXPAND(ZFMP_2) \
837 , _ZFP_mP_EXPAND(ZFMP_3) \
838 , _ZFP_mP_EXPAND(ZFMP_4) \
839 , _ZFP_mP_EXPAND(ZFMP_5) \
840 )
842#define ZFObjectOnInitUserRegister_7(resultMethod, methodInvokerAction, ownerClass \
843 , ZFMP_0 \
844 , ZFMP_1 \
845 , ZFMP_2 \
846 , ZFMP_3 \
847 , ZFMP_4 \
848 , ZFMP_5 \
849 , ZFMP_6 \
850 ) \
851 ZFMethodUserRegisterDetail_7(resultMethod, { \
852 methodInvokerAction \
853 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
854 , _ZFP_mP_EXPAND(ZFMP_0) \
855 , _ZFP_mP_EXPAND(ZFMP_1) \
856 , _ZFP_mP_EXPAND(ZFMP_2) \
857 , _ZFP_mP_EXPAND(ZFMP_3) \
858 , _ZFP_mP_EXPAND(ZFMP_4) \
859 , _ZFP_mP_EXPAND(ZFMP_5) \
860 , _ZFP_mP_EXPAND(ZFMP_6) \
861 )
863#define ZFObjectOnInitUserRegister_8(resultMethod, methodInvokerAction, ownerClass \
864 , ZFMP_0 \
865 , ZFMP_1 \
866 , ZFMP_2 \
867 , ZFMP_3 \
868 , ZFMP_4 \
869 , ZFMP_5 \
870 , ZFMP_6 \
871 , ZFMP_7 \
872 ) \
873 ZFMethodUserRegisterDetail_8(resultMethod, { \
874 methodInvokerAction \
875 }, ownerClass, protected, ZFMethodTypeVirtual, void, "objectOnInit" \
876 , _ZFP_mP_EXPAND(ZFMP_0) \
877 , _ZFP_mP_EXPAND(ZFMP_1) \
878 , _ZFP_mP_EXPAND(ZFMP_2) \
879 , _ZFP_mP_EXPAND(ZFMP_3) \
880 , _ZFP_mP_EXPAND(ZFMP_4) \
881 , _ZFP_mP_EXPAND(ZFMP_5) \
882 , _ZFP_mP_EXPAND(ZFMP_6) \
883 , _ZFP_mP_EXPAND(ZFMP_7) \
884 )
885
886// ============================================================
894 ZF_IN const ZFClass *cls
895 , ZF_IN const ZFMP &methodParam
896 , ZF_IN const ZFListener &methodImpl
897 , ZF_OUT_OPT zfstring *errorHint = zfnull
898 );
903 ZF_IN const ZFClass *cls
905 , ZF_OUT_OPT zfstring *errorHint = zfnull
906 );
907
909#endif // #ifndef _ZFI_ZFObjectDeclare_h_
910
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define ZF_OUT_OPT
dummy macro that shows the param used as optional output
Definition ZFCoreTypeDef_ClassType.h:196
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:184
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
const ZFMethod * ZFObjectOnInitDynamicRegister(const ZFClass *cls, const ZFMP &methodParam, const ZFListener &methodImpl, zfstring *errorHint=zft_zfnull)
util to declare ZFObject::objectOnInit as ZFMethodDynamicRegister
ZFObject's class info.
Definition ZFClass.h:66
listener as ZFCallback, mostly used by ZFObject::observerNotify
Definition ZFObjectObserver.h:30
util for ZFDynamic::method
Definition ZFMethodDynamicRegister.h:197
param for ZFMethodDynamicRegister
Definition ZFMethodDynamicRegister.h:102
reflectable method for ZFObject
Definition ZFMethod.h:252
util class to cast ZFObject types freely