C++ Crear variables y objetos en tiempo de ejecución

Iniciado por ljma, 21 Noviembre 2014, 10:29 AM

0 Miembros y 1 Visitante están viendo este tema.

ljma

Hola,

¿Es posible crear variables u objetos en tiempo de ejecución?

Por ejemplo con los valores almacenados en el array

string sValores[2]={"uno","dos","tres"};

crear mediante un bucle tres variables con los nombres almacenados "uno" "dos" "tres".

Gracias anticipadas

Saludos


avesudra

#1
No entiendo bien tu pregunta, si ya tienes definidas las cadenas en una variable ¿para qué quieres otras? , o quieres decir esto:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>

int main(int argc, char *argv[])
{
   std::string sValores[3] = {"uno", "dos", "tres"};

   //Creamos las variables a partir de sValores
   std::string cadenaUno  = sValores[0];
   std::string cadenaDos  = sValores[1];
   std::string cadenaTres = sValores[2];

   // O a un array constante de caracteres.
   const char *cCadenaUno  = sValores[0].c_str();
   const char *cCadenaDos  = sValores[1].c_str();
   const char *cCadenaTres = sValores[2].c_str();

   std::cout << cadenaUno  << std::endl;
   std::cout << cadenaDos  << std::endl;
   std::cout << cadenaTres << std::endl;

   std::cout << cCadenaUno  << std::endl;
   std::cout << cCadenaDos  << std::endl;
   std::cout << cCadenaTres << std::endl;
   
   return EXIT_SUCCESS;
}

O quizás te refieras a esto:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char *argv[])
{
    string sValores[3] = {"uno", "dos", "tres"};
    vector<string*> variablesNuevas;
    //Creamos las variables a partir de sValores
    for(int i = 0; i!= sizeof(sValores)/sizeof(string); ++i)
    {
        string * tmp = new string(sValores[i]);
        variablesNuevas.push_back(tmp);
    }

    for(vector<string*>::iterator it = variablesNuevas.begin(); it != variablesNuevas.end(); ++it)
    {
        cout << **it << endl;
        // Liberamos memoria
        delete *it;
    }

    return EXIT_SUCCESS;
}
Regístrate en

ljma

Hola,

Gracias por responder.

Me refiero más bien a la segunda opción pero, aunque lo que pongo este mal, lo pongo para que se entienda:

//Creamos las variables a partir de sValores
   for(int i = 0; i!= sizeof(sValores)/sizeof(string); ++i)
   {
       string (sValores) ;
   }

Se crean tantas variables de tipo  string (o int ..) como elementos existan en el array que se llamarán de acuerdo con el valor del array o combinando un texto con el valor del array.

Espero haberme explicado.

Gracias anticipadas

Saludos

Miky Gonzalez

Mira el uso de listas enlazadas y pilas. Puedes buscarlo en google.
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

avesudra

Hombre lo de poner nombre a las variables no se si se puede hacer, creo que no, lo que si puedes hacer es ir declarando punteros y reservando memoria y guardando esos punteros en un vector que luego eliminas, en ese caso es el segundo codigo que te he puesto. Tambien puedes hacer lo que te comenta Miky.
Regístrate en

rir3760

Cita de: ljma en 21 Noviembre 2014, 13:11 PMSe crean tantas variables de tipo  string (o int ..) como elementos existan en el array que se llamarán de acuerdo con el valor del array o combinando un texto con el valor del array.
Eso no es posible en C++, en su lugar puedes crear un objeto de la clase map utilizando como clave el valor (texto, entero, etc.) que deseas.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language