Definir valores de variables desde una cadena de caracteres [C++11]

Publicado el 06 marzo 2015 por Gaspar Fernández Moreno @gaspar_fm


A veces, es muy útil poder definir variables de diversos tipos (int, string, double, bool, etc) o incluso inicializar clases todo desde un string. El objetivo es dar al usuario de nuestro programa más libertad aún y no combernos demasiado la cabeza transformando cada una de las variables. Por otro lado, no siempre podrán estar definidas todas, por lo que hacer una solución específica para cada cao es un poco largo.

En github he publicado un proyecto para eso mismo: optf. Con sólo un archivo de cabecera podemos construir, por ejemplo, un conector de base de datos de la siguiente manera:

Como decía antes, lo mejor es que no tenemos por qué definirlo todo y no tenemos que ceñirnos en el orden, podemos pasar directamente líneas de un fichero de configuración o generar las cadenas de caracteres con la información que nos pasa el usuario sin preocuparnos del tipo de dato que tendrá el atributo de la clase al que asignaremos el valor y sin tener que reescribir demasiadas veces el nombre de la variable.

Copio y pego uno de los ejemplos del proyecto:

Basta con esta línea

a la que le pasaremos todos los strings que queramos parsear. Nuestra clase tendrá que tener una función llamada set_option() (su nombre lo podemos cambiar). Esa función deberá asignar el valor que vemos en la cadena de caracteres a la variable correspondiente.
Ahora podríamos pensar que tendríamos que tendríamos que dar el nombre de la variable en formato string y hacer que corresponda con la variable homónima pero optf se encargará de eso, sólo tenemos que crear las variables como atributos de la clase.
Ahora la función set_option, tendrá esta forma:

Esta función recibirá el nombre de la opción que se define y el string con el valor, pero dentro de la función podremos llamar a OPTF_DEFINE(variable) y ya se encargará de todo. Cuando llamamos a OPTF_DEFINE(variable, 1) lo hacemos para poder un else delante de la condición (OPTF_DEFINE es una macro que ya se encarga de hacer el trabajo sucio).

Bueno, os invito a visitar el proyecto.