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