Скорее всего, это сделано так, как предлагает sbi, поэтому структура интерпретатора будет выглядеть примерно так:
struct Object
{
ubyte type;
void* value;
};
Фактическое значение будет размещено где-то в куче, и когда объект будет создан, интерпретатор запишет тип в ubyte type
. Позже функции заметят тип, используя object.type
и присвоив ему значение этого типа, или просто предположят, что это был правильный тип, например:
useObjectAsString(Object toUse)
{
char* data = (char*)toUse.value;
}
Если у вас есть только несколько типов, которые вы хотите реализовать, вы также можете попробовать использовать union.