Требуется помощь с контейнером для универсального элемента в C ++ - PullRequest
1 голос
/ 25 сентября 2010

Интересно, можно ли определить общий контейнер C ++, в котором хранятся элементы, следующим образом:

template <typename T>
class Item{
typename T value;
}

Мне известно, что для объявления требуется определение типа элемента, например:

std::vector<Item <int> > items;

Существует ли какая-либо модель или обертка, которая может решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 сентября 2010

С 9 типами ваш лучший выстрел должен использовать boost::variant, по сравнению с boost::any вы получаете:

  • тип безопасности (проверка времени компиляции)
  • скорость (аналогично объединению, без выделения кучи, без typeid вызова)

Просто используйте это:

typedef boost::variant<Type0, Type1, Type2, Type3, Type4,
                       Type5, Type6, Type7, Type8>        Item;

typedef std::vector<Item> ItemsVector;

Чтобы вызвать операцию на boost::variant, лучше всего использовать создание статического посетителя, прочитайте об этом в документации .

1 голос
/ 25 сентября 2010

Если вам нужен контейнер, который может содержать элементы любого типа, посмотрите на boost::any.

В вашем текущем вопросе нет большой разницы между std::vector<Item <int> > и std::vector<int>.

...