折叠逗号
需要在参数包中的每个元素上执行特定功能是一种常见操作。使用 C++ 11,我们能做的最好的事情是:
template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
using expander = int[];
(void)expander{0,
(void(os << args), 0)...
};
}
但是使用 fold 表达式,上面简化为:
template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
(void(os << args), ...);
}
不需要神秘的样板。