【发布时间】:2014-12-11 00:22:26
【问题描述】:
我注意到开源项目FeatherKit中的以下行:
int _[] = { (SubscribeToType<MessageTypes>( bus, receiver, desubscribers, unsubscribe ), 0)... };
使用以下上下文:
template<class... MessageTypes>
void Subscribe( MessageBus& bus, MessageReceiver<MessageTypes...>& receiver, bool unsubscribe ) {
std::vector<std::function<void()>> desubscribers;
int _[] = { (SubscribeToType<MessageTypes>( bus, receiver, desubscribers, unsubscribe ), 0)... };
(void) _;
receiver.desubscribers = desubscribers;
}
显然是在为可变参数模板中的每个参数执行函数SubscribeToType。
我的问题有两个:
这条线路究竟是如何工作的?为什么参数解包允许该函数为可变参数模板中的每个参数执行?
我很确定这条线可以用 lambda 代替。如何用 lambda 表达式替换该行?
我已经联系了 FeatherKit 的原作者,但当时他无法回答我的问题。
【问题讨论】:
标签: c++ lambda variadic-templates