Значение шаблона C ++ в std :: map [duplicate]

Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы

5
задан user3240855 27 January 2014 в 17:26
поделиться

6 ответов

Вы хотите использовать boost::variant :

std::map <std::string, boost::variant<typeX, typeY>>
3
ответ дан Paul Evans 4 September 2018 в 08:07
поделиться

Вам нужно стирать типа .

Тип erasure - это шаблон, который скрывает базовый тип, такими известными примерами являются boost :: any , но имейте в виду, что у любого из них есть динамическое полиморфное поведение (динамическая отправка во время выполнения). boost :: variant, с другой стороны, является другим примером и использует методы метапрограммирования шаблонов. см. вариант vs any

Простейшее решение, хотя, могло бы написать собственное стирание типа класса с перечислением для базового типа.

0
ответ дан concept3d 4 September 2018 в 08:07
поделиться

Одним из способов реализации многотипной карты является использование отличных функций std :: tuple в C ++ 11, что позволяет получить доступ с помощью ключа типа. Вы можете обернуть это, чтобы создать доступ с помощью произвольных ключей. Подробное объяснение этого (и довольно интересного чтения) доступно здесь:

https://jguegant.github.io/blogs/tech/thread-safe-multi-type- map.html

1
ответ дан johnbakers 4 September 2018 в 08:07
поделиться

С помощью некоторого метапрограммирования вы можете легко создать гетерогенную карту, которая может хранить любой тип из определенного набора типов. Вот пример , который делает это без стирания типа или необходимости посещать значения.

1
ответ дан Julien 4 September 2018 в 08:07
поделиться

Являются ли подклассы типаX и typeY класса typeBase? Если это так, вы можете сделать std::map<std::string,typeBase*> для хранения как типовX *, так и typeY * на карте.

2
ответ дан rom1504 4 September 2018 в 08:07
поделиться

Это, вероятно, будет чрезмерным излишеством, но QT имеет переменную QVariant, которая может использоваться для сопоставления с различными типами переменных (QT).

Документация здесь: http: // qt -project.org/doc/qt-5.0/qtcore/qvariant.html

0
ответ дан Snowman6286 4 September 2018 в 08:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: