C++ 如何参数化用作另一个lambda参数的lambda

C++ 如何参数化用作另一个lambda参数的lambda,c++,lambda,C++,Lambda,但是,我想将一个参数(或参数的变量列表)传递到print,并在repeat中使用它。可能吗?例如,修改后的打印如下所示: $ ./a.out in print in print in print auto print=[](std::string&name){std::cout这可能会有帮助(从) //通用lambda运算符()是一个带有两个参数的模板 自动glambda=[](自动a、自动和&b){返回a

但是,我想将一个参数(或参数的变量列表)传递到
print
,并在
repeat
中使用它。可能吗?例如,修改后的
打印
如下所示:

$ ./a.out 
in print
in print
in print
auto print=[](std::string&name){std::cout这可能会有帮助(从)

//通用lambda运算符()是一个带有两个参数的模板
自动glambda=[](自动a、自动和&b){返回a
//通用lambda运算符()是一个带有两个参数的模板
自动glambda=[](自动a、自动和&b){返回a自动p=vglambda([](自动v1,自动v2,自动v3){std::cout我看不到问题吗

// generic lambda, operator() is a template with two parameters
auto glambda = [](auto a, auto&& b) { return a < b; };
bool b = glambda(3, 3.14); // ok

// generic lambda, operator() is a template with one parameter
auto vglambda = [](auto printer) {
    return [=](auto&&... ts) // generic lambda, ts is a parameter pack
    { 
        printer(std::forward<decltype(ts)>(ts)...);
        return [=] { printer(ts...); }; // nullary lambda (takes no parameters)
    };
};
auto p = vglambda([](auto v1, auto v2, auto v3) { std::cout << v1 << v2 << v3; });
auto q = p(1, 'a', 3.14); // outputs 1a3.14
q();                      // outputs 1a3.14
#包括
#包括
//如何参数化这个lambda并在第二个lambda中使用它?

自动打印=[](const std::string&s){std::cout我看不到问题吗

// generic lambda, operator() is a template with two parameters
auto glambda = [](auto a, auto&& b) { return a < b; };
bool b = glambda(3, 3.14); // ok

// generic lambda, operator() is a template with one parameter
auto vglambda = [](auto printer) {
    return [=](auto&&... ts) // generic lambda, ts is a parameter pack
    { 
        printer(std::forward<decltype(ts)>(ts)...);
        return [=] { printer(ts...); }; // nullary lambda (takes no parameters)
    };
};
auto p = vglambda([](auto v1, auto v2, auto v3) { std::cout << v1 << v2 << v3; });
auto q = p(1, 'a', 3.14); // outputs 1a3.14
q();                      // outputs 1a3.14
#包括
#包括
//如何参数化这个lambda并在第二个lambda中使用它?
自动打印=[](常量std::string&s){std::cout
// generic lambda, operator() is a template with two parameters
auto glambda = [](auto a, auto&& b) { return a < b; };
bool b = glambda(3, 3.14); // ok

// generic lambda, operator() is a template with one parameter
auto vglambda = [](auto printer) {
    return [=](auto&&... ts) // generic lambda, ts is a parameter pack
    { 
        printer(std::forward<decltype(ts)>(ts)...);
        return [=] { printer(ts...); }; // nullary lambda (takes no parameters)
    };
};
auto p = vglambda([](auto v1, auto v2, auto v3) { std::cout << v1 << v2 << v3; });
auto q = p(1, 'a', 3.14); // outputs 1a3.14
q();                      // outputs 1a3.14
#include <iostream>
#include <string>

// How to parameterize this lambda and use it in the second lambda?
auto print = []( const std::string& s ) { std::cout << s << std::endl; };

auto repeat = [](auto function, const int num_repeat) {
  int ctr = 0;
  while (ctr++ < num_repeat) {
    function( "call #" + std::to_string( ctr ) );
  }
};

int main() {
  repeat(print, 3);
}