jjzjj

c++ - 使用 lambdas 做嵌套函数

大家对使用lambda在C++中执行嵌套函数有何看法?例如,而不是这个:staticvoidprepare_eggs(){...}staticvoidprepare_ham(){...}staticvoidprepare_cheese(){...}staticfry_ingredients(){...}voidmake_omlette(){prepare_eggs();prepare_ham();prepare_cheese();fry_ingredients();}你这样做:voidmake_omlette(){autoprepare_eggs=[&](){...};autoprep

c++ - C++14/17 中的延迟评估 - 只是 lambdas 还是 future 等?

我刚刚读到:LazyEvaluationinC++并注意到它有点旧,而且大多数答案都是关于2011年之前的C++。现在我们有语法lambdas,它甚至可以推断返回类型,所以惰性求值似乎可以归结为只是传递它们:而不是autox=foo();你执行autounevaluted_x=[](){returnfoo();};然后评估您需要的时间/地点:autox=unevaluted_x();似乎没有更多的东西。但是,answersthere之一建议使用futures与异步启动。有人可以用C++或更抽象地说明为什么/如果future对于惰性评估工作很重要吗?似乎future很可能会被急切地评估,

c++ - 就内存使用而言,模板 + 仿函数/lambdas 不是最理想的吗?

出于说明目的,假设我要实现一个通用整数比较函数。我可以想到一些方法来定义/调用函数。(A)函数模板+仿函数templatevoidcompare_int(inta,intb,conststd::string&msg,Comparecmp_func){if(cmp_func(a,b))std::cout这将是对该函数的几次调用:MyFunctor_LTmflt;MyFunctor_GTmfgt;//notnecessarytoshowtheimplementationcompare_int(3,5,"lessthan",mflt);compare_int(3,5,"greaterthan

C++11 lambdas 和方括号

这个问题在这里已经有了答案:WhatisalambdaexpressioninC++11?(10个回答)c++[&]operator[duplicate](6个回答)关闭9年前。查看这个示例lambda:[](intfactor)->int{returnfactor*factor;}谁能向我解释一下C++11lambda表达式前面的方括号有什么用处? 最佳答案 方括号指定lambda“捕获”哪些变量,以及如何(通过值或引用)。捕获意味着您可以从lambda内部引用lambda外部的变量。如果按值捕获,您将在创建lambda时获取变量

c++ - 与 lambdas 相比,std::bind 仍然有用吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:BindVsLambda?由于lambda已获得广泛支持,我对std::bind的使用已降至0。std::bind有没有特别适合lambda函数的问题?一旦添加了lambda,是否有令人信服的理由将std::bind保留在标准中? 最佳答案 您可以按值或按引用捕获,问题是按值捕获实际上意味着“通过复制捕获”。这是一个只移动类型的显示停止器。所以你不能使用lambda来执行以下操作:structfoo{voidbar(){}};std::unique_ptr

c++ - 为什么要在 lambdas 中捕获 this 以及指向 this 的共享指针?

在Boost.asioC++11示例中有片段likethefollowing:voiddo_read(){autoself(shared_from_this());socket_.async_read_some(boost::asio::buffer(data_,max_length),[this,self](boost::system::error_codeec,std::size_tlength){if(!ec){do_write(length);}});}我明白为什么需要self指针来保持类存活(参见thisquestion),但我不明白为什么this指针是也捕获。是否只是为了让

c++ - 将 lambdas 传递给 std::thread 并调用类方法

我在使用std::thread和lambdas时遇到了一些麻烦。我有一个TheMethod方法,我应该使用std::thread将一些函数调用并行化到同一个类中的方法。我定义了一个lambda函数,并尝试按如下方式将其传递给我创建的std::thread实例:autofunctor=[this](constCursor&c,size_t&result)->void{result=classMethod(c);};size_ta;Cursorcursor=someCursor();std::threadt1(functor,cursor,a);t1.join();不幸的是,编译器给了我:

c++ - GDB 可以调试 C++ lambdas 吗?

我积极使用C++11功能。我在VisualStudio2013中创建了依赖lambda来运行多个线程的程序(lambda表示任务,线程接收它必须运行的lambda实例)。Lambda在静态库中定义并链接在可执行文件中,该可执行文件从该可执行文件创建的线程调用它。当我尝试使用GDB调试此应用程序的Linux版本时,看起来GDB无法进入包含lambda的方法。它不能在这个函数中设置断点,当我尝试进入时,它甚至会进入lambda从其主体调用的方法,但是在这些方法的return之后它不会进入lambda主体,它转到lambda调用的下一个方法等。有没有办法用GDB调试lambdasbody?

c++ - 在 lambdas 的上下文中,捕获这个词是什么意思?

有人可以就此提供一些见解吗?是lambda捕获外部变量,还是外部世界捕获lambda生成的值?捕获某个变量是什么意思? 最佳答案 lambda正在捕获一个外部变量。lambda是一种用于创建类的语法。捕获变量意味着将变量传递给该类的构造函数。一个lambda可以指定它是按引用传递还是按值传递。例如:[&]{x+=1;}//capturebyreference[=]{returnx+1;}//capturebyvalue第一个生成的类大致如下:classfoo{int&x;public:foo(int&x):x(x){}voidope

c++ - 我必须删除 lambdas 吗?

我将指向lambda的指针存储在动态分配的对象中:structFunction{SomeType*(*func)(int);Function(SomeType*(*new_func)(int)):func(new_func){}}Function*myf=newFunction([](intx){returndoSomething(x);});deletemyf;我必须在这个类的析构函数中写一些特别的东西吗? 最佳答案 不,您不需要做任何特别的事情。在这种情况下(您将lambda转换为函数指针),这与告诉您也不需要删除doSomet