LINUX.ORG.RU

Инициализация std::map

 


0

3

Хочу иметь map, задающий связь между std::type_info и функцией. Выглядит так:

std::map<std::type_info, std::function<std::string(const std::any&)>> serializers;

Я могу добавлять в него элементы так:

serializers.emplace(typeid(void), [] (const std::any&) -> std::string {
	return "null";
});

А я хочу сразу задать содержимое при объявлении:

std::map<std::type_info, std::function<std::string(const std::any&)>> serializers = {
	{ typeid(void), [] (const std::any&) -> std::string {
		return "null";
	} }
};

В итоге получаю ошибку, что не наден подходящий конструктор.

Разумеется, стандарт C++17 включен. Пробовал GCC и Clang актуальных версий.

Что я делаю не так?

★★★★★

у std::type_info конструктора копирования и оператора присваивания нету

так норм:

std::map<std::type_index, std::function<std::string(const std::experimental::any&)>> serializers = {
        { std::type_index(typeid(int)), [] (const std::experimental::any&) -> std::string {return "null";} }
    };

xperious ★★
()
Последнее исправление: xperious (всего исправлений: 1)
Ответ на: комментарий от xperious

Да, так работает. Большое спасибо!

KivApple ★★★★★
() автор топика
Ответ на: комментарий от xperious

std::type_index(typeid(int))

Но зачем, ведь конструктор type_index не explicit.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.