+1 На самом деле одно место, где я использовал void указатель, было подходящим для использования интерфейса класса .. выглядит намного лучше после редактирования!

у код, и до сих пор я использовал такие структуры:

struct s{
  enum Types { zero = 0, one, two };
  unsigned int type;
  void* data;
} 

Мне нужна была некоторая общая структура для хранения данных из разных классов, и я хотел использовать ее в std :: vector, поэтому я не могу использовать шаблоны. Какой вариант лучше: союзы или пустые указатели?

Пустой указатель выделяет только столько места, сколько мне нужно, но c ++ по какой-то причине является строго типизированным языком, и приведение везде, где мне нужно, чтобы использовать эти данные, не является способом, которым должен создаваться код c ++. Как я читал, указатели void не должны использоваться, если нет альтернативы.

Этой альтернативой могут быть Союзы. Они поставляются с c ++ и используют одинаковое пространство памяти для каждого члена, очень похоже на указатели void. Однако они имеют цену - выделенное пространство является размером самого большого элемента в объединении, и в моем случае различия между размерами велики.

Это довольно стилистическая и проблема «правильного использования языка», поскольку оба способа выполняют то, что мне нужно, но я не могу решить, может ли красиво стилизованный код C ++ платить за эту потраченную впустую память (хотя память в наши дни невелика беспокойство).

Ответы на вопрос(3)

Ваш ответ на вопрос