具有函数的可变参数模板(args)...扩展

时间:2017-08-14 12:26:33

标签: c++11 c++14 variadic-templates initializer-list variadic

今天,我的同事通过带有函数调用的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绑定的内容与具有函数调用的上下文相同?

0 个答案:

没有答案