我希望用不同的签名构建一个std :: lambda的地图。例如,这有效:
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。