Как добавить функцию в 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;}
  });
→ Ссылка