C++ c++;lambda传递自动参数类型
我有一个带有自动参数的lambda函数,我想将参数推入STL容器(例如std::vector) 例如:C++ c++;lambda传递自动参数类型,c++,lambda,auto,C++,Lambda,Auto,我有一个带有自动参数的lambda函数,我想将参数推入STL容器(例如std::vector) 例如: template <typename T> struct A { A(int a, T &&t): _a(a), _t(t){} int _a; T _t; void work() { _t(this); } }; void test() { A a(3, [](auto a_ptr)
template <typename T>
struct A
{
A(int a, T &&t): _a(a), _t(t){}
int _a;
T _t;
void work()
{
_t(this);
}
};
void test()
{
A a(3, [](auto a_ptr)
{
std::cout << a_ptr->_a << std::endl;
});
a.work();
}
模板
结构A
{
A(inta,T&&T):\u A(A),\u T(T){
国际组织;
T_T,;
无效工作()
{
_t(这个);
}
};
无效测试()
{
A(3,[](自动A_ptr)
{
std::cout\u a将lambda转换为不带参数的std::function(捕获您需要的参数)
void执行函数(const std::vector&functions){
用于(常量自动和项目:功能){
项目();
}
}
int main(int argc,字符**argv){
//申报
向量函数;
//填充
对于(int i=0;i<3;++i){
functions.emplace_back([i](){/<-捕获要在此处处理的数据
//在调用时使用数据执行某些操作
std::cout我可以在lambda中创建一个新的lambda,该lambda捕获所有参数,然后将其放入向量中:
void test()
{
std::vector<std::function <void ()>> v;
A a(3, [&v](auto a_ptr)
{
v.push_back([a_ptr](){
std::cout << a_ptr->_a << std::endl;
});
});
a.work();
for (auto &i: v)
{
i();
}
}
void测试()
{
std::向量v;
A(3,[&v](自动A_ptr)
{
v、 推回{
std::cout\a向量必须具有相同类型的所有项。lambda没有已知的类型。如果可能,请使用std::tuple,而不是多态调用work,这样您将需要一个向量或向量,我将避免使用原始指针,特别是当您拥有您的项时。@doron,您是对的。在我的实际代码中,我使用共享指针。此代码这只是一个简化的示例。我无法捕获参数。lambda用作回调函数。我猜示例中不清楚,但在我的实际应用程序中,lambda由其他类/方法转发到调用类
void execute_functions(const std::vector<std::function<void()>>& functions) {
for (const auto& item : functions) {
item();
}
}
int main(int argc, char** argv) {
// declare
std::vector<std::function<void()>> functions;
// populate
for (int i = 0; i < 3; ++i) {
functions.emplace_back([i](){ // < - capture data to process here
// do something wth data when will be called
std::cout << i << "\n";
});
}
// execute somewhere
execute_functions(functions);
return 0;
}
void test()
{
std::vector<std::function <void ()>> v;
A a(3, [&v](auto a_ptr)
{
v.push_back([a_ptr](){
std::cout << a_ptr->_a << std::endl;
});
});
a.work();
for (auto &i: v)
{
i();
}
}