C++11 使用c+异步收集值+;11兰姆达

C++11 使用c+异步收集值+;11兰姆达,c++11,lambda,C++11,Lambda,c++11 lambda非常适合这样的回调: // Event notification onEvent([](){printf("Event fired\n");}); // async IO get(key, [](int value){ printf("%i\n", value); }); 但是,有没有一种简单/有效的方法可以在不修改get()接口的情况下收集数据 那么,当我只在两个事件都发生时收到通知时?为什么要使用该界面?多个调用之间的魔法依赖似乎令人讨厌get(key1,key

c++11 lambda非常适合这样的回调:

// Event notification
onEvent([](){printf("Event fired\n");});
// async IO
get(key, [](int value){
  printf("%i\n", value);
});
但是,有没有一种简单/有效的方法可以在不修改get()接口的情况下收集数据


那么,当我只在两个事件都发生时收到通知时?

为什么要使用该界面?多个调用之间的魔法依赖似乎令人讨厌
get(key1,key2,cb)
让我看得更清楚,或者
get(keys(key1,key2),cb)
甚至更清楚。想象一下你想混合使用许多不同的接口,比如wait for resource a和event b之类的东西。但是你的设计仍然需要在代码的不同部分之间创建神奇的依赖关系。魔法依赖性使得代码很难理解,并且需要在可能无限复杂的场景背后显示状态。当然,您知道您打算用lambda连续地、紧密地调用n个方法:但您的设计并没有这样说<代码>获取(键1,cb)然后是几十亿条指令和几个小时的时间,然后
get(键2,cb),然后它发生了,这就是您实际要求的工作。想想这有多傻?如果你需要计算key1+key2的和,那么即使需要几个小时,也没有其他方法来计算?那有什么傻的?
auto cb = [](int value1, int value2) {
  printf("%i\n", value1);
  printf("%i\n", value2);
};
get(key1, cb);
get(key2, cb);