Я пишу код, и до сих пор я использовал такие структуры:
struct s{
enum Types { zero = 0, one, two };
unsigned int type;
void* data;
}
Мне нужна была общая структура для хранения данных из разных классов, и я хотел использовать ее в std :: vector,вот почему я не могу использовать шаблоны.Какой вариант лучше: союзы или указатели void?
Указатель void выделяет столько места, сколько мне нужно, но c ++ по какой-то причине является языком со строгой типизацией, и приведение везде, где мне нужно, использует эти данные не так, как код c ++должен быть разработан.Как я читал, указатели void не должны использоваться, если нет альтернативы.
Эта альтернатива может быть Союзы.Они поставляются с c ++ и используют одинаковое пространство памяти для каждого члена, очень похоже на указатели void.Однако они имеют цену - выделенное пространство является размером самого большого элемента в объединении, и в моем случае различия между размерами велики.
Это довольно стилистическая и проблема «правильного использования языка», поскольку оба способа достигают того, чтоМне нужно это сделать, но я не могу решить, может ли красиво стилизованный код c ++ платить за эту потерянную память (хотя память в наши дни не представляет большой проблемы).