[C con Clase] String - Funcion
Steven Davidson
srd4121 en njit.edu
Lun Jul 9 16:02:47 CEST 2012
Hola Álvaro,
On 7/9/2012 8:58 AM, Álvaro Gómez Uría wrote:
> Hola,
> Me gustaria saber si existe la posibilidad de usar un String como
> nombre de una funcion?. Para que se entienda mejor pongo un ejemplo:
>
> String name = iter->movable->getName();
> // Ahora quisiera usar name como nombre de otra funcion.
> if(!name.isPlaying())
> {
> name.trigger();
> }
>
Según este ejemplo, el objeto 'String' realmente actúa como el objeto,
del cual se invoca sus funciones miembro.
La respuesta breve es: "no". La explicación es que ese nombre es un
conjunto de valores. Como C++ es compilado, el compilador no tiene la
más mínima idea de los valores y de hecho los valores no forman parte
del código fuente. Habría sido interesante que C++ aceptara cadenas
constantes como identificadores de entidades en el código fuente, pero
me temo que no es el caso.
La solución es crear un array asociativo que a veces se llama "mapa".
Puedes usar la clase-plantilla 'map', definida en <map>, para asociar un
objeto como clave con otro objeto como el valor. Esta solución es muy
parecida a la que se usa en las bases de datos basadas en las relaciones
entre entidades.
La lógica sería la siguiente,
<clave,valor>
----------------------
<"NPC_001",oNPC_001 &>
<"NPC_002",oNPC_002 &>
<"NPC_003",oNPC_003 &>
<"NPC_004",oNPC_004 &>
...
Aquí los valores siguen la nomenclatura de 'objeto &' que se refiere a
una referencia de un objeto. Esto es porque mantendremos los objetos
instanciados en otra tabla o lista. Por ejemplo,
lista
--------
oNPC_001
oNPC_002
oNPC_003
oNPC_004
...
También podríamos guardar punteros a los objetos en el mapa en lugar de
referencias.
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase