具有不同签名的lambda地图?

时间:2018-05-24 16:46:11

标签: c++ lambda

我希望用不同的签名构建一个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。

0 个答案:

没有答案