close
Warning:
Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.
- Timestamp:
-
Aug 2, 2010, 11:21:22 AM (15 years ago)
- Author:
-
Víctor de Buen Remiro
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v3
|
v4
|
|
50 | 50 | == Creación de librerías C++ built-in TOL == |
51 | 51 | |
| 52 | Las macros de creación de operadores y las sentencias usadas en el código C++ de TOL para |
| 53 | la creación de variables están pensadas para generarlo todo en el ámbito global pero este |
| 54 | tipo de librerías deben restringirse a un uso local, por lo que es necesario hacer algún |
| 55 | trabajo previo que indique al sistema lo que debe hacer. |
| 56 | |
| 57 | La existencia de la macro LOCAL_NAMEBLOCK indicará a la macro de definición de métodos |
| 58 | {{{DefExtOpr}}} que se encuentran en un ámbito local correspondiente al NameBlock |
| 59 | especificado como _local_nameblock_. Por lo tanto, debe llamarse antes de hacer la |
| 60 | inclusión de las mismas. Como sólo es una macro no es necesario que la variable C++ |
| 61 | _local_nameblock_ exista de antemano, basta con que exista antes de llamar a la macro |
| 62 | {{{DefExtOpr}}}. |
| 63 | |
| 64 | La macro de creación de miembros {{{DeclareLocalMember}}} se encarga de crear la |
| 65 | variable TOL y de añadirla al NameBlock _local_nameblock_. |
| 66 | |
| 67 | Los métodos sólo necesitan llamar cuál es el NameBlock al que pertenecen para acceder al resto |
| 68 | de métodos y miembros. |
| 69 | |
| 70 | El siguiente código puede servir de plantilla para la creación de estas librerías |
| 71 | |
52 | 72 | {{{ |
53 | 73 | #!cpp |
… |
… |
|
58 | 78 | */ |
59 | 79 | |
| 80 | //Starts local namebock scope |
60 | 81 | #define LOCAL_NAMEBLOCK _local_nameblock_ |
61 | 82 | |
| 83 | #include <tol/tol_bnameblock.h> |
| 84 | ... |
| 85 | #include ... |
| 86 | |
| 87 | //Creates local nameblock container |
62 | 88 | static BUserNameBlock* _local_unb_ = new BGraContensP<BNameBlock>("", new BNameBlock); |
| 89 | |
| 90 | //Creates the reference to local nameblock |
63 | 91 | static BNameBlock& _local_nameblock_ = _local_unb_->Contens(); |
64 | 92 | |
… |
… |
|
70 | 98 | } |
71 | 99 | |
72 | | //Internal operator declaration |
73 | | DeclareContensClass(...) |
74 | | DefIntOpr(...) |
| 100 | //Member declaration |
| 101 | DeclareLocalMember(TYPE, MEMBER_NAME, MEMBER_DESCRIPTION, MEMBER); |
75 | 102 | |
76 | 103 | //External operator declaration |
77 | | DeclareContensClass(...) |
78 | | DefExtOpr(...) |
| 104 | DeclareContensClass(ANY , BTMPCLASS, BCONTENSCLASS) |
| 105 | DefExtOpr(ORD,BCONTENSCLASS,NAME,MINARG,MAXARG,LISTGRA,LISTARGS,DES,CL) |
| 106 | void BCONTENSCLASS::CalcContens() |
| 107 | { |
| 108 | TYPE aux = MEMBER_NAME; |
| 109 | ... |
| 110 | } |
79 | 111 | |
80 | | //Member declaration |
81 | | DeclareLocalMember(<TYPE>, <MEMBER_NAME>, <MEMBER_DESCRIPTION>, <MEMBER>) |
| 112 | |
82 | 113 | |
83 | 114 | }}} |