Как добавить функцию в std::map
Есть массив std::map<char, std::function<void(std::string str)>>map.
В него надо добавить функцию
map.insert(std::pair<'(', (std::string str) { //...//return smth;}>);
При компиляцию имею ошибку str wasn`t declared in this scope. Как решить эту проблему?
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Где-то объявлена функция с заданной сигнатурой (аргументы и возвращаемый тип данных)
void some_function(std::string arg) {}
Теперь добавляем ее в массив:
map.insert( std::pair<char, std::function<void(std::string)>>(')', some_function) );
Автор решения: Николай Алексеевич Терехов
→ Ссылка
Используйте Lambda functions https://ru.cppreference.com/w/cpp/language/lambda
Также вы путаете шаблонные типы с аргументами конструктора.
std::map<char, std::function<void(std::string str)>>map;
map.insert(std::pair<const char, std::function<void(std::string str)>>(
'(',
[](std::string str) {/* ... */ return;}));
// или так
map.insert(std::make_pair(
'(',
[](std::string str) {/* ... */ return;}
));
// или так
map.insert({
'(',
[](std::string str) { /* ... */ return;}
});