Hola buenos dias a todos, lo que les queria comentar era lo siguiente que me esta haciendo pensar un rato.
Estoy creando para C++ unas funciones de redim, redim preserve (para los que usaron alguna vez visual basic saben a que me refiero). y sino es simple.
Redim permite redimencionar un array eliminando todo su contenido.
redim preserve permite redimensionar un array conservando todo su contenido.
Funciones.h
Código C++:
Ver original#include <cstdlib>
#include <iostream>
#include <boost/variant.hpp>
typedef boost::variant< int, std::string> var;
#define tamanio(arr)(sizeof(arr)/sizeof(arr[0]))
#define redim(arr, tam)(arr = new var[tam])
#define copyarr(arr1, arr2)(redim(arr1, tamanio(arr2)), cop_array(arr1, arr2, tamanio(arr2)))
#define redim_preserve(arr, tam)(redim(arr, tam))
/*Aqui deberia primero, copiar el array en una variable temporal,
luego lo redimensiono con redim, y luego copio el array temporal
en la variable redimensionada*/
main.cpp
Código C++:
Ver original#include <time.h>
#include "funciones.h"
using namespace std;
void wait ( int seconds )
{
clock_t endwait;
endwait
= clock () + seconds
* CLOCKS_PER_SEC
; while (clock() < endwait
) {} }
void cop_array(var *arr, var arr2[], int tam)
{
int i;
for (i = 0; i < tam; i++)
{
arr[i] = arr2[i];
}
return;
}
int main()
{
var a[] = {1, "probando", 35, 28, "probando"};
var *b;
copyarr(b, a);
b = redim_preserve(b, (tamanio(b)+1));
b[5] = "funcionaa";
cout << tamanio(a) << " Valores: " << b[0] << b[1] << b[2] << b[5] << endl;
wait(5);
return 1;
}
Antes que nada explico de forma breve mi codigo:
Cree una tipo de dato, basado en otro tipo de dato boost::variant, que permite que en una variable se almacene un dato tipo integer o string.
la meta del codigo es poder "imitar" las funciones que les mencione de Visual basic en C++, con el redim no tuve ningun problema, el problema es cuando quiero hacer el redim_preserve, por que necesito (supongo yo) primero guardar el array en otro temporal, luego redimensionarlo (que eso puedo usando la funcion que estableci de redim), y luego al array redimensionado guardarle el array temporal que cree antes.
El problema es que usando #define como funcion no se como crear un array, segundo es que no puedo usar funciones comunes (void por ejemplo) por que cuando envio el array como parametro ya pierdo muchos datos (longitud del array y la posibilidad de redimensionarlo usando new var[dimension])
Por favor si algo no se entendio preguntenme por que soy malo para expresarme, y segundo gracias por tomarse el tiempo de leer el problema.
Soy bastante novato en C y en C++, agradesco a los usuarios del foro por ayudar a los novatos con sus problemas.