今天,我的同事通过带有函数调用的varadic模板向我展示了一个惊人的c ++扩展技巧。简洁,看起来像:
template <typename T, T... I>
void print_sequence(std::integer_sequence<T, I...>) {
std::initializer_list<bool>{ bool(std::cout << I << ' ')... };
}
然后我从wiki/Variadic_template和stackoverflow Unpacking a typelist找到类似的东西,例如,
template<typename... Args> inline void pass(Args&&...) {}
template<typename... Args> inline void expand(Args&&... args) {
pass( some_function(args)... );
}
expand(42, "answer", true);
即使阅读上面的wiki链接,我也真的很难用这种风格some_function(args)...
。这是如何运作的?为什么它必须是非void返回类型?它是单独使用功能还是任何适用的表达方式?例如,来自另一个stackoverflow帖子Converting Variadic template pack into std::initializer_list
template<typename ...Args>
void foo () {
fun({Args::value...});
}
上面的...
与Args::value
绑定的内容与具有函数调用的上下文相同?