首页 > 解决方案 > 具有不同签名的 lambda 映射?

问题描述

我希望建立一个具有不同签名的 lambda 的 std::map。例如,这有效:

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

下面演示了我也想在同一张地图中做的事情,但它不会编译,因为 lambda 签名与地图的不匹配:

map.emplace("equal", [](double a, double b) { return a == b; });
bool baz = map["equal"](42, 42);

有没有办法定义一个 std::map 来接受具有不同签名的 lamdbas?

编辑:以上不近似我的用例。这是为了识别我的编码问题。实际用例了解签名。

编辑:感谢指出类似问题Store functions with different signatures in a map的海报。不幸的是,该答案中发布的代码无法为 VS2017/C++17 编译。

标签: c++lambda

解决方案


推荐阅读