Как в значение для хэш таблицы передать лямбда функцию

Требуется: Хэш таблица в которой ключ это строка, а значение это функция, вычисляющая какую-либо операцию.Например: ключ - "+", значение - лямбда функция возвращающая сумму двух чисел.

Вариант с 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 шт):

Автор решения: Harry

Ну, например, так — все же через 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 — признак какой-то непродуманности проекта. Вы точно хотите хранить разнотипные до такой степени (количества параметров) вещи в одном контейнере? А пользоваться потом как — каждый раз еще при написании разбирая, что тут плюс, значит, надо руками написать передачу двух аргументов? Тогда в чем выгода?...

→ Ссылка