Как в значение для хэш таблицы передать лямбда функцию
Требуется: Хэш таблица в которой ключ это строка, а значение это функция, вычисляющая какую-либо операцию.Например: ключ - "+", значение - лямбда функция возвращающая сумму двух чисел.
Вариант с functional не подошел, поскольку для других функций нужен только один аргумент.
Сам код:
#include <iostream>
#include <unordered_map>
#include <boost/any.hpp>
int main() {
std::unordered_map<std::string, boost::any> function_map;
function_map["+"] = [](float x, float y){ return x + y; };
std::cout << function_map["+"](2.0, 2.0);
return 0;
}
Ошибка возникает при попытке вывода значения, возвращаемого из функции.
Сама ошибка: E0980 вызов объекта типа класса без соответсвующей функции operator() или функций преобразования указателя в функцию.
Ответы (1 шт):
Ну, например, так — все же через function.
int main() {
std::unordered_map<std::string, std::any> function_map;
function_map["+"] = std::function<float(float,float)>([](float x, float y){ return x + y; });
std::cout << std::any_cast<std::function<float(float,float)>>(function_map["+"])(2.0, 2.0);
}
Только вот для меня всегда any — признак какой-то непродуманности проекта. Вы точно хотите хранить разнотипные до такой степени (количества параметров) вещи в одном контейнере? А пользоваться потом как — каждый раз еще при написании разбирая, что тут плюс, значит, надо руками написать передачу двух аргументов? Тогда в чем выгода?...