Я надеюсь построить std :: map lambdas с различными сигнатурами.Например, это работает:
std::map<std::string, std::function<bool(double)>> map;
map.emplace("gt_zero", [](double a) { return a > 0; });
map.emplace("lt_zero", [](double a) { return a < 0; });
bool foo = map["gt_zero"](42); // returns true
bool bar = map["lt_zero"](42); // returns false
Ниже показано, что я также хотел бы сделать на той же карте, но не скомпилируется, потому что лямбда-сигнатура не совпадает с сигнатурой карты:
map.emplace("equal", [](double a, double b) { return a == b; });
bool baz = map["equal"](42, 42);
Есть ли способ определить std :: map для принятия lamdbas с разными сигнатурами?
РЕДАКТИРОВАТЬ: Выше не соответствует моему варианту использования.Это для выявления моей проблемы с кодированием.Фактический сценарий использования знает сигнатуру.
РЕДАКТИРОВАТЬ: Благодаря плакатам, которые указали на аналогичный вопрос Хранить функции с различными подписями на карте .К сожалению, код, размещенный в этом ответе, не компилируется для VS2017 / C ++ 17.