Как создать неупорядоченную карту, содержащую функции?

У меня есть функции, которые работают со следующей структурой:

struct stm {
 size_t op; 
 std::string st_out; 
}

И я объявил подпись неупорядоченной карты, которая сохранит ссылки:

std::unordered_map<uint64_t, std::function<int(stm&, const uint64_t)> instruction_actions;

Я написал функции, ссылку на которые хочу сохранить:

bool write(stm&s, const uint64_t item) {
  std::cout << "op: " << s.st_out << std::endl; 
  return true; 
}

Но как мне добавить их на карту?

Ты пробовал instruction_actions[0xCODE]=write? Какую ошибку вы видите?

fukanchik 21.11.2022 14:26

В вашей функции отсутствует оператор return.

Jason Liam 21.11.2022 14:28
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный
JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы,...
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Подъем в javascript
Подъем в javascript
Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих...
Улучшение генерации файлов Angular
Улучшение генерации файлов Angular
Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.
1
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, в вашей функции write отсутствует оператор возврата.


как добавить их на карту?

Есть несколько способов сделать это, как показано ниже:

std::unordered_map<uint64_t, std::function<int(stm&, const uint64_t)>> 
                  instruction_actions{{5, write}};

Или с помощью std::map::insert

instruction_actions.insert({5, write});

Или используя std::map::operator[]:

instruction_actions[5] = write;

Рабочая демонстрация

Спасибо. Не лучше ли было бы передать функцию как ссылку?

awwd 21.11.2022 14:44

Jason Liam 21.11.2022 14:48
instruction_actions[5] = write; также есть возможность добавить его в map или перезаписать ранее вставленный std::function.
mch 21.11.2022 14:51

@mch Добавлено (каламбур)

Jason Liam 21.11.2022 14:54

Другие вопросы по теме