Можно ли создать класс стека, который принимает любой тип переменной? не только 1 тип - PullRequest
0 голосов
/ 15 июля 2010

Я видел класс стека, который использует шаблон для определения типа данных, которые хранятся в стеке.Что делать, если мне нужен стек, содержащий данные другого типа?Я немного подумал об этом и приблизился к использованию пустого указателя (но указатель на пустоту не может быть разыменован, поэтому это не правильное решение) Итак ... Возможно ли иметь такой класс?

Ответы [ 4 ]

2 голосов
/ 15 июля 2010

Вы можете иметь стек boost::any значений.

1 голос
/ 15 июля 2010

Здесь перечислены различные варианты, от самых безопасных до самых сложных в управлении

  • Общий базовый класс
  • boost::variant (при условии, что вы знаете все типы заранее)
  • boost::any (очень сложно действовать, потому что там может быть что угодно ...)
  • void* (еще раз очень сложно и возникает проблема с управлением памятью)

Возьмите тот, который вы хотите.

0 голосов
/ 15 июля 2010

Вы должны взглянуть на шаблоны C ++.Таким образом, вы можете создавать классы или функции для работы с любым типом данных.

0 голосов
/ 15 июля 2010
Конечно,

указатели void нельзя разыменовывать, но вы все равно можете привести указатель void к нужному типу указателя, а затем разыменовать его.

  void *ptr = malloc(10);

  *ptr = 10; // won't work

  *((int *)ptr) = 10; // will work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...