Я пытаюсь создать неупорядоченную карту std::functions
.Где ключ - это строка, где вы будете искать функцию, которую хотите вызвать, а функция - это значение.
Я написал небольшую программу:
#include <iostream>
#include <unordered_map>
#include <functional>
#include <string>
void func1()
{
std::cout << "Function1 has been called." << std::endl;
}
int doMaths(int a)
{
return a + 10;
}
int main()
{
std::unordered_map<std::string,std::function<void()>> myMap;
myMap["func1"] = func1;
}
Это прекрасно компилируется, и я могу вызвать функцию (однако я не уверен, что это правильный способ сделать это)place:
auto mapIter = myMap.find("func1");
auto mapVal = mapIter->second;
mapVal();
Затем вызывается функция, однако я думаю, что это за счет создания новой копии функции?Пожалуйста, поправьте меня, если я ошибаюсь по этому поводу.
Однако, если я пытаюсь сделать: myMap["doMaths"] = doMaths;
Я получаю ошибку компилятора, так как значение в myMap
равно std::function<void()>>
, а не std::function<int(int)>>
.Я получил это для компиляции, когда я сделал: myMap["doMaths"] = std::bind(doMaths,int());
Однако я не знаю, что это на самом деле делает.И когда я пытаюсь вызвать его так же, как func1
, я получаю ошибку компилятора.
Так что я думаю, у меня есть два вопроса:
Как мне создать unordered_map, который будетпринять любой тип функции для его значения?И как я могу вызвать функцию на карте, не делая копию функции?