xtictor.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name: wx/xtictor.h
  3. // Purpose: XTI constructors
  4. // Author: Stefan Csomor
  5. // Modified by: Francesco Montorsi
  6. // Created: 27/07/03
  7. // Copyright: (c) 1997 Julian Smart
  8. // (c) 2003 Stefan Csomor
  9. // Licence: wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11. #ifndef _XTICTOR_H_
  12. #define _XTICTOR_H_
  13. #include "wx/defs.h"
  14. #if wxUSE_EXTENDED_RTTI
  15. #include "wx/xti.h"
  16. // ----------------------------------------------------------------------------
  17. // Constructor Bridges
  18. // ----------------------------------------------------------------------------
  19. // A constructor bridge allows to call a ctor with an arbitrary number
  20. // or parameters during runtime
  21. class WXDLLIMPEXP_BASE wxObjectAllocatorAndCreator
  22. {
  23. public:
  24. virtual ~wxObjectAllocatorAndCreator() { }
  25. virtual bool Create(wxObject * &o, wxAny *args) = 0;
  26. };
  27. // a direct constructor bridge calls the operator new for this class and
  28. // passes all params to the constructor. Needed for classes that cannot be
  29. // instantiated using alloc-create semantics
  30. class WXDLLIMPEXP_BASE wxObjectAllocator : public wxObjectAllocatorAndCreator
  31. {
  32. public:
  33. virtual bool Create(wxObject * &o, wxAny *args) = 0;
  34. };
  35. // ----------------------------------------------------------------------------
  36. // Constructor Bridges for all Numbers of Params
  37. // ----------------------------------------------------------------------------
  38. // no params
  39. template<typename Class>
  40. struct wxObjectAllocatorAndCreator_0 : public wxObjectAllocatorAndCreator
  41. {
  42. bool Create(wxObject * &o, wxAny *)
  43. {
  44. Class *obj = wx_dynamic_cast(Class*, o);
  45. return obj->Create();
  46. }
  47. };
  48. struct wxObjectAllocatorAndCreator_Dummy : public wxObjectAllocatorAndCreator
  49. {
  50. bool Create(wxObject *&, wxAny *)
  51. {
  52. return true;
  53. }
  54. };
  55. #define wxCONSTRUCTOR_0(klass) \
  56. wxObjectAllocatorAndCreator_0<klass> constructor##klass; \
  57. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  58. const wxChar *klass::ms_constructorProperties[] = { NULL }; \
  59. const int klass::ms_constructorPropertiesCount = 0;
  60. #define wxCONSTRUCTOR_DUMMY(klass) \
  61. wxObjectAllocatorAndCreator_Dummy constructor##klass; \
  62. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  63. const wxChar *klass::ms_constructorProperties[] = { NULL }; \
  64. const int klass::ms_constructorPropertiesCount = 0;
  65. // direct constructor version
  66. template<typename Class>
  67. struct wxDirectConstructorBridge_0 : public wxObjectAllocator
  68. {
  69. bool Create(wxObject * &o, wxAny *args)
  70. {
  71. o = new Class( );
  72. return o != NULL;
  73. }
  74. };
  75. #define wxDIRECT_CONSTRUCTOR_0(klass) \
  76. wxDirectConstructorBridge_0<klass> constructor##klass; \
  77. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  78. const wxChar *klass::ms_constructorProperties[] = { NULL }; \
  79. const int klass::ms_constructorPropertiesCount = 0;
  80. // 1 param
  81. template<typename Class, typename T0>
  82. struct wxObjectAllocatorAndCreator_1 : public wxObjectAllocatorAndCreator
  83. {
  84. bool Create(wxObject * &o, wxAny *args)
  85. {
  86. Class *obj = wx_dynamic_cast(Class*, o);
  87. return obj->Create(
  88. (args[0]).As(static_cast<T0*>(NULL))
  89. );
  90. }
  91. };
  92. #define wxCONSTRUCTOR_1(klass,t0,v0) \
  93. wxObjectAllocatorAndCreator_1<klass,t0> constructor##klass; \
  94. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  95. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) }; \
  96. const int klass::ms_constructorPropertiesCount = 1;
  97. // direct constructor version
  98. template<typename Class, typename T0>
  99. struct wxDirectConstructorBridge_1 : public wxObjectAllocator
  100. {
  101. bool Create(wxObject * &o, wxAny *args)
  102. {
  103. o = new Class(
  104. (args[0]).As(static_cast<T0*>(NULL))
  105. );
  106. return o != NULL;
  107. }
  108. };
  109. #define wxDIRECT_CONSTRUCTOR_1(klass,t0,v0) \
  110. wxDirectConstructorBridge_1<klass,t0,t1> constructor##klass; \
  111. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  112. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) }; \
  113. const int klass::ms_constructorPropertiesCount = 1;
  114. // 2 params
  115. template<typename Class,
  116. typename T0, typename T1>
  117. struct wxObjectAllocatorAndCreator_2 : public wxObjectAllocatorAndCreator
  118. {
  119. bool Create(wxObject * &o, wxAny *args)
  120. {
  121. Class *obj = wx_dynamic_cast(Class*, o);
  122. return obj->Create(
  123. (args[0]).As(static_cast<T0*>(NULL)),
  124. (args[1]).As(static_cast<T1*>(NULL))
  125. );
  126. }
  127. };
  128. #define wxCONSTRUCTOR_2(klass,t0,v0,t1,v1) \
  129. wxObjectAllocatorAndCreator_2<klass,t0,t1> constructor##klass; \
  130. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  131. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1) }; \
  132. const int klass::ms_constructorPropertiesCount = 2;
  133. // direct constructor version
  134. template<typename Class,
  135. typename T0, typename T1>
  136. struct wxDirectConstructorBridge_2 : public wxObjectAllocator
  137. {
  138. bool Create(wxObject * &o, wxAny *args)
  139. {
  140. o = new Class(
  141. (args[0]).As(static_cast<T0*>(NULL)),
  142. (args[1]).As(static_cast<T1*>(NULL))
  143. );
  144. return o != NULL;
  145. }
  146. };
  147. #define wxDIRECT_CONSTRUCTOR_2(klass,t0,v0,t1,v1) \
  148. wxDirectConstructorBridge_2<klass,t0,t1> constructor##klass; \
  149. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  150. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1) }; \
  151. const int klass::ms_constructorPropertiesCount = 2;
  152. // 3 params
  153. template<typename Class,
  154. typename T0, typename T1, typename T2>
  155. struct wxObjectAllocatorAndCreator_3 : public wxObjectAllocatorAndCreator
  156. {
  157. bool Create(wxObject * &o, wxAny *args)
  158. {
  159. Class *obj = wx_dynamic_cast(Class*, o);
  160. return obj->Create(
  161. (args[0]).As(static_cast<T0*>(NULL)),
  162. (args[1]).As(static_cast<T1*>(NULL)),
  163. (args[2]).As(static_cast<T2*>(NULL))
  164. );
  165. }
  166. };
  167. #define wxCONSTRUCTOR_3(klass,t0,v0,t1,v1,t2,v2) \
  168. wxObjectAllocatorAndCreator_3<klass,t0,t1,t2> constructor##klass; \
  169. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  170. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1), wxT(#v2) }; \
  171. const int klass::ms_constructorPropertiesCount = 3;
  172. // direct constructor version
  173. template<typename Class,
  174. typename T0, typename T1, typename T2>
  175. struct wxDirectConstructorBridge_3 : public wxObjectAllocator
  176. {
  177. bool Create(wxObject * &o, wxAny *args)
  178. {
  179. o = new Class(
  180. (args[0]).As(static_cast<T0*>(NULL)),
  181. (args[1]).As(static_cast<T1*>(NULL)),
  182. (args[2]).As(static_cast<T2*>(NULL))
  183. );
  184. return o != NULL;
  185. }
  186. };
  187. #define wxDIRECT_CONSTRUCTOR_3(klass,t0,v0,t1,v1,t2,v2) \
  188. wxDirectConstructorBridge_3<klass,t0,t1,t2> constructor##klass; \
  189. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  190. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1), wxT(#v2) }; \
  191. const int klass::ms_constructorPropertiesCount = 3;
  192. // 4 params
  193. template<typename Class,
  194. typename T0, typename T1, typename T2, typename T3>
  195. struct wxObjectAllocatorAndCreator_4 : public wxObjectAllocatorAndCreator
  196. {
  197. bool Create(wxObject * &o, wxAny *args)
  198. {
  199. Class *obj = wx_dynamic_cast(Class*, o);
  200. return obj->Create(
  201. (args[0]).As(static_cast<T0*>(NULL)),
  202. (args[1]).As(static_cast<T1*>(NULL)),
  203. (args[2]).As(static_cast<T2*>(NULL)),
  204. (args[3]).As(static_cast<T3*>(NULL))
  205. );
  206. }
  207. };
  208. #define wxCONSTRUCTOR_4(klass,t0,v0,t1,v1,t2,v2,t3,v3) \
  209. wxObjectAllocatorAndCreator_4<klass,t0,t1,t2,t3> constructor##klass; \
  210. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  211. const wxChar *klass::ms_constructorProperties[] = \
  212. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3) }; \
  213. const int klass::ms_constructorPropertiesCount = 4;
  214. // direct constructor version
  215. template<typename Class,
  216. typename T0, typename T1, typename T2, typename T3>
  217. struct wxDirectConstructorBridge_4 : public wxObjectAllocator
  218. {
  219. bool Create(wxObject * &o, wxAny *args)
  220. {
  221. o = new Class(
  222. (args[0]).As(static_cast<T0*>(NULL)),
  223. (args[1]).As(static_cast<T1*>(NULL)),
  224. (args[2]).As(static_cast<T2*>(NULL)),
  225. (args[3]).As(static_cast<T3*>(NULL))
  226. );
  227. return o != NULL;
  228. }
  229. };
  230. #define wxDIRECT_CONSTRUCTOR_4(klass,t0,v0,t1,v1,t2,v2,t3,v3) \
  231. wxDirectConstructorBridge_4<klass,t0,t1,t2,t3> constructor##klass; \
  232. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  233. const wxChar *klass::ms_constructorProperties[] = \
  234. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3) }; \
  235. const int klass::ms_constructorPropertiesCount = 4;
  236. // 5 params
  237. template<typename Class,
  238. typename T0, typename T1, typename T2, typename T3, typename T4>
  239. struct wxObjectAllocatorAndCreator_5 : public wxObjectAllocatorAndCreator
  240. {
  241. bool Create(wxObject * &o, wxAny *args)
  242. {
  243. Class *obj = wx_dynamic_cast(Class*, o);
  244. return obj->Create(
  245. (args[0]).As(static_cast<T0*>(NULL)),
  246. (args[1]).As(static_cast<T1*>(NULL)),
  247. (args[2]).As(static_cast<T2*>(NULL)),
  248. (args[3]).As(static_cast<T3*>(NULL)),
  249. (args[4]).As(static_cast<T4*>(NULL))
  250. );
  251. }
  252. };
  253. #define wxCONSTRUCTOR_5(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \
  254. wxObjectAllocatorAndCreator_5<klass,t0,t1,t2,t3,t4> constructor##klass; \
  255. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  256. const wxChar *klass::ms_constructorProperties[] = \
  257. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4) }; \
  258. const int klass::ms_constructorPropertiesCount = 5;
  259. // direct constructor version
  260. template<typename Class,
  261. typename T0, typename T1, typename T2, typename T3, typename T4>
  262. struct wxDirectConstructorBridge_5 : public wxObjectAllocator
  263. {
  264. bool Create(wxObject * &o, wxAny *args)
  265. {
  266. o = new Class(
  267. (args[0]).As(static_cast<T0*>(NULL)),
  268. (args[1]).As(static_cast<T1*>(NULL)),
  269. (args[2]).As(static_cast<T2*>(NULL)),
  270. (args[3]).As(static_cast<T3*>(NULL)),
  271. (args[4]).As(static_cast<T4*>(NULL))
  272. );
  273. return o != NULL;
  274. }
  275. };
  276. #define wxDIRECT_CONSTRUCTOR_5(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \
  277. wxDirectConstructorBridge_5<klass,t0,t1,t2,t3,t4> constructor##klass; \
  278. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  279. const wxChar *klass::ms_constructorProperties[] = \
  280. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4) }; \
  281. const int klass::ms_constructorPropertiesCount = 5;
  282. // 6 params
  283. template<typename Class,
  284. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  285. struct wxObjectAllocatorAndCreator_6 : public wxObjectAllocatorAndCreator
  286. {
  287. bool Create(wxObject * &o, wxAny *args)
  288. {
  289. Class *obj = wx_dynamic_cast(Class*, o);
  290. return obj->Create(
  291. (args[0]).As(static_cast<T0*>(NULL)),
  292. (args[1]).As(static_cast<T1*>(NULL)),
  293. (args[2]).As(static_cast<T2*>(NULL)),
  294. (args[3]).As(static_cast<T3*>(NULL)),
  295. (args[4]).As(static_cast<T4*>(NULL)),
  296. (args[5]).As(static_cast<T5*>(NULL))
  297. );
  298. }
  299. };
  300. #define wxCONSTRUCTOR_6(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \
  301. wxObjectAllocatorAndCreator_6<klass,t0,t1,t2,t3,t4,t5> constructor##klass; \
  302. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  303. const wxChar *klass::ms_constructorProperties[] = \
  304. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5) }; \
  305. const int klass::ms_constructorPropertiesCount = 6;
  306. // direct constructor version
  307. template<typename Class,
  308. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  309. struct wxDirectConstructorBridge_6 : public wxObjectAllocator
  310. {
  311. bool Create(wxObject * &o, wxAny *args)
  312. {
  313. o = new Class(
  314. (args[0]).As(static_cast<T0*>(NULL)),
  315. (args[1]).As(static_cast<T1*>(NULL)),
  316. (args[2]).As(static_cast<T2*>(NULL)),
  317. (args[3]).As(static_cast<T3*>(NULL)),
  318. (args[4]).As(static_cast<T4*>(NULL)),
  319. (args[5]).As(static_cast<T5*>(NULL))
  320. );
  321. return o != NULL;
  322. }
  323. };
  324. #define wxDIRECT_CONSTRUCTOR_6(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \
  325. wxDirectConstructorBridge_6<klass,t0,t1,t2,t3,t4,t5> constructor##klass; \
  326. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  327. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1), \
  328. wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5) }; \
  329. const int klass::ms_constructorPropertiesCount = 6;
  330. // 7 params
  331. template<typename Class,
  332. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  333. struct wxObjectAllocatorAndCreator_7 : public wxObjectAllocatorAndCreator
  334. {
  335. bool Create(wxObject * &o, wxAny *args)
  336. {
  337. Class *obj = wx_dynamic_cast(Class*, o);
  338. return obj->Create(
  339. (args[0]).As(static_cast<T0*>(NULL)),
  340. (args[1]).As(static_cast<T1*>(NULL)),
  341. (args[2]).As(static_cast<T2*>(NULL)),
  342. (args[3]).As(static_cast<T3*>(NULL)),
  343. (args[4]).As(static_cast<T4*>(NULL)),
  344. (args[5]).As(static_cast<T5*>(NULL)),
  345. (args[6]).As(static_cast<T6*>(NULL))
  346. );
  347. }
  348. };
  349. #define wxCONSTRUCTOR_7(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \
  350. wxObjectAllocatorAndCreator_7<klass,t0,t1,t2,t3,t4,t5,t6> constructor##klass; \
  351. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  352. const wxChar *klass::ms_constructorProperties[] = { wxT(#v0), wxT(#v1), \
  353. wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5), wxT(#v6) }; \
  354. const int klass::ms_constructorPropertiesCount = 7;
  355. // direct constructor version
  356. template<typename Class,
  357. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  358. struct wxDirectConstructorBridge_7 : public wxObjectAllocator
  359. {
  360. bool Create(wxObject * &o, wxAny *args)
  361. {
  362. o = new Class(
  363. (args[0]).As(static_cast<T0*>(NULL)),
  364. (args[1]).As(static_cast<T1*>(NULL)),
  365. (args[2]).As(static_cast<T2*>(NULL)),
  366. (args[3]).As(static_cast<T3*>(NULL)),
  367. (args[4]).As(static_cast<T4*>(NULL)),
  368. (args[5]).As(static_cast<T5*>(NULL)),
  369. (args[6]).As(static_cast<T6*>(NULL))
  370. );
  371. return o != NULL;
  372. }
  373. };
  374. #define wxDIRECT_CONSTRUCTOR_7(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \
  375. wxDirectConstructorBridge_7<klass,t0,t1,t2,t3,t4,t5,t6> constructor##klass; \
  376. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  377. const wxChar *klass::ms_constructorProperties[] = \
  378. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5), wxT(#v6) }; \
  379. const int klass::ms_constructorPropertiesCount = 7;
  380. // 8 params
  381. template<typename Class,
  382. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, \
  383. typename T6, typename T7>
  384. struct wxObjectAllocatorAndCreator_8 : public wxObjectAllocatorAndCreator
  385. {
  386. bool Create(wxObject * &o, wxAny *args)
  387. {
  388. Class *obj = wx_dynamic_cast(Class*, o);
  389. return obj->Create(
  390. (args[0]).As(static_cast<T0*>(NULL)),
  391. (args[1]).As(static_cast<T1*>(NULL)),
  392. (args[2]).As(static_cast<T2*>(NULL)),
  393. (args[3]).As(static_cast<T3*>(NULL)),
  394. (args[4]).As(static_cast<T4*>(NULL)),
  395. (args[5]).As(static_cast<T5*>(NULL)),
  396. (args[6]).As(static_cast<T6*>(NULL)),
  397. (args[7]).As(static_cast<T7*>(NULL))
  398. );
  399. }
  400. };
  401. #define wxCONSTRUCTOR_8(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \
  402. wxObjectAllocatorAndCreator_8<klass,t0,t1,t2,t3,t4,t5,t6,t7> constructor##klass; \
  403. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  404. const wxChar *klass::ms_constructorProperties[] = \
  405. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5), wxT(#v6), wxT(#v7) }; \
  406. const int klass::ms_constructorPropertiesCount = 8;
  407. // direct constructor version
  408. template<typename Class,
  409. typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, \
  410. typename T6, typename T7>
  411. struct wxDirectConstructorBridge_8 : public wxObjectAllocator
  412. {
  413. bool Create(wxObject * &o, wxAny *args)
  414. {
  415. o = new Class(
  416. (args[0]).As(static_cast<T0*>(NULL)),
  417. (args[1]).As(static_cast<T1*>(NULL)),
  418. (args[2]).As(static_cast<T2*>(NULL)),
  419. (args[3]).As(static_cast<T3*>(NULL)),
  420. (args[4]).As(static_cast<T4*>(NULL)),
  421. (args[5]).As(static_cast<T5*>(NULL)),
  422. (args[6]).As(static_cast<T6*>(NULL)),
  423. (args[7]).As(static_cast<T7*>(NULL))
  424. );
  425. return o != NULL;
  426. }
  427. };
  428. #define wxDIRECT_CONSTRUCTOR_8(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \
  429. wxDirectConstructorBridge_8<klass,t0,t1,t2,t3,t4,t5,t6,t7> constructor##klass; \
  430. wxObjectAllocatorAndCreator* klass::ms_constructor = &constructor##klass; \
  431. const wxChar *klass::ms_constructorProperties[] = \
  432. { wxT(#v0), wxT(#v1), wxT(#v2), wxT(#v3), wxT(#v4), wxT(#v5), wxT(#v6), wxT(#v7) }; \
  433. const int klass::ms_constructorPropertiesCount = 8;
  434. #endif // wxUSE_EXTENDED_RTTI
  435. #endif // _XTICTOR_H_