Variadic templates for lambda expressions

前端 未结 2 1065
渐次进展
渐次进展 2021-01-04 18:54

What\'s the correct way to do this with g++:

template < typename F >
void g (F f);

template < typename ... A >
void h (A ... a);

template <          


        
相关标签:
2条回答
  • 2021-01-04 19:13

    I think you need to expand the pack a in the capture list as well, like this:

    template < typename ... A >
    void f (A ... a) {
      g ([&, a...] () { h (a...); }); 
    }
    

    Here is the relevant text from the C++0x Final Committee Draft, section 5.1.2.23:

    A capture followed by an ellipsis is a pack expansion (14.5.3). [ Example:

    template<class... Args> void f(Args... args) {
        auto lm = [&, args...] { return g(args...); }; lm();
    }
    

    — end example ]

    0 讨论(0)
  • 2021-01-04 19:25
    #include <functional>
    template < typename ... A >
    void f (A ... a) {
      g (std::bind(h, a...));
    }
    
    0 讨论(0)
提交回复
热议问题