Надеюсь, мой вопрос ясен. Я хотел бы сделать что-то вроде этого:
TYPE tipo = int;
tipo = float;
Чтобы позже иметь возможность делать другие подобные вещи:
void* ptr = new tipo();
cout << *(tipo*)ptr;
Это, в основном, для определения типа пустоты. указатель (или variant
-объект, или any
-объект) и его отсылка, но во время выполнения.
Это вся моя проблема: я пытаюсь создать массив любой тип переменной (имитирующий ОЗУ P C для компилятора). Для этого я использую указатели void и другой массив, в котором я храню целое число, представляющее тип элемента, хранящегося в первом массиве. Итак, я могу правильно отлить элемент, когда это потребуется. Этот код работает, но, конечно, он не так функциональн, потому что мне пришлось бы использовать все переключатели каждый раз, когда мне нужно было восстанавливать элемент из моего массива:
#define INT 0
#define FLOAT 1
#define BOOL 2
int main(void)
{
void* ram[] = { new float(2.5), new float(5.8), new bool(true), new int(8) };
int tipo[] = { FLOAT, FLOAT, BOOL, INT };
int i = 1;
int salida;
switch (i)
{
case INT: salida = *(int*)ram[i]; break;
case FLOAT: salida = *(float*)ram[i]; break;
case BOOL: salida = *(bool*)ram[i]; break;
}
cout << salida;
return 86;
}
Интересно, есть ли у меня "массив типов", поэтому я могу сделать что-то вроде этого
int main(void)
{
void* ram[] = { new float(2.5), new float(5.8), new bool(true), new int(8) };
TYPE tipo[] = { float, float, bool, int };
int i = 1;
int salida = *(tipo[i]*)ram[i];
cout << salida;
return 86;
}
Возможно ли это? Если нет, как бы вы решили эту проблему?