Карта лямбд с разными подписями? - PullRequest
0 голосов
/ 24 мая 2018

Я надеюсь построить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...