c++ - 具有不同签名的 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 编译。
解决方案
推荐阅读
- ruby-on-rails - 如何使用 Vue.js 在 Ruby on Rails 中修复“Turbolinks 无法重定向”
- sql - 如何只显示一次数据库的重复项?
- plsql - 我如何强制触发提交事务
- amazon-web-services - 一个集群上的 AWS ECS 多任务定义
- php - 如何使用 jquery 和 PHP 更改 div 内容
- codeigniter - 如果我在输入字段中输入了一些网址然后在codeigniter中作为自定义文本发布/结果,这可能吗?
- git - GIT - 在生产中实现功能分支
- java - 如何知道 Spring Rest Controller 中的文件上传持续时间
- apache-kafka - 跨消费者组的 Kafka 偏移量不正确
- javafx - 如何将 3d 对象放在一起?