草庐IT

lambda_sync

全部标签

c++ - 为什么不能捕获我的 C++ lambda 函数?

假设我有一个模板化的ActiontemplatestructAction{Action(::boost::functionfunc):func_(func){}voidoperator()(ArgTarg){func_(arg);}private:::boost::functionfunc_;};我是这样使用Action的:classXCallbackInvoker:publicCallbackInvoker{public:XCallbackInvoker(Actioncallback):CallbackInvoker(Action>([&callback](::boost::shar

C++ 将 Lambda 与 vector 中的函数指针区分开来

我正在编写一个小的事件管理器类,我在其中将一些函数指针存储在一个vector中。我用std::function作为vector类型,我测试了在其中插入lambdas和普通函数并且它有效:voidt(intp){/*things*/}[...]event.bind([](intp){/*things*/});event.bind(t);现在,(在某个时候我需要删除lambda而不是函数,)我的问题是:是否可以将lambda与函数区分开来?如果是,怎么做?编辑:既然我澄清了我的疑惑,这个问题就如题所示 最佳答案 真正的答案是:你不想这样

c++ - 传递 Lambda 时,Visual Studio 2017 中的什么扩展消除了 "bool"与 "std::function"的歧义?

以下代码在VisualStudio2017中使用MSVC编译器编译,但在GCC或Clang中编译失败。#include#includevoidfunctionTest(std::function){std::cout要解决这个问题,我们可以像这样使用enable_if:#include#includevoidfunctionTest(std::function){std::cout::value>::type>voidfunctionTest(BOOL_TYPE){std::cout或者我可以通过引入用户类型而不是bool来消除歧义(如果构造函数存在歧义问题,您需要这样做):#incl

c++ - (C++14) lambda 数组 : error: 'name' declared as array of 'auto'

我很难解决这个错误。我承认,我是C++的新手,我的困难来自于不理解错误消息。代码如下:autoselectionFuncs[8]={[&](constVector3&min,constVector3&max){returnmax.x_==seamValues.x_||max.y_==seamValues.y_||max.z_==seamValues.z_;},[&](constVector3&min,constVector3&max){returnmin.x_==seamValues.x_;},[&](constVector3&min,constVector3&max){returnm

C++:为什么这个 sync() 在这个组合模式中不起作用?

我正在尝试构建一个进度条类,它可以通过使用看起来像组合模式的东西来拥有任意数量的子进度条。假设我有这个类pbar:classpbar{public:pbar(constintw){width=w;}//alreadysetsthe~pbar(){}voidsetwidth(constintw){width=w;}//setthewidthtowvoidshow()const;voidsync();voidadd(constpbarbar){//add'sasubbarsubbars.pushback(bar);}private:std::vectorsubbars;//thesub-p

c++ - 当 lambda 作为参数传入时推导模板参数

我正在尝试编写函数func这样编译器就可以推断出模板参数,当我传入std::function时它会起作用,但不适用于lambda:templateTResultfunc(std::functionf){returnTResult();}intmain(){//VisualStudio2013intresult=func([](){//error:'TResultfunc(std::function)':couldnotdeducetemplateargumentfor'std::function'from'main::'return100;});std::functiontestFun

c++ - 为什么 std::result_of 不适用于 lambda?

我设法将我的案例简化为以下最简单的代码:#includeautocall(constauto&f)->typenamestd::result_of::type{returnf();}intmain(){returncall([]{return0;});}gcc-4.9.2和gcc-5.0.0都不编译!两者都认为“调用”应该返回一个lambda函数!不要弄清楚“调用”返回一个int。这是编译器中的错误还是我的C++关闭了?非常感谢。 最佳答案 您的代码不是有效的C++,因为函数参数类型不能是auto,此语法已为ConceptsLite

c++ - lambda 参数可以隐藏非捕获变量吗?

我有一个看起来像这样的代码-它被大大简化了,但是这个片段编译并表现出相同的行为:templatefloatFloatSelect(constfloatin_value,TFunc&&Predicate){returnstd::forward(Predicate)(in_value)?in_value:0.0f;};voidDisplayFloatSelect(){constfloatvalue=FloatSelect(-1.0f,[](constfloatvalue){returnvalue>0.0f;});std::cout启用-Wshadow后,编译器会发出以下警告(如here所示

c++ - 如何从通用 lambda 中的可变参数包中获取类型?

我正在尝试编写一个将返回genericlambda的函数使用可变参数,其中lambda检查其中一个参数是否等于特定值。这是(大致)我正在尝试做的事情:templateinlineautoarg_eq(constTValue&value){return[value](auto...args)->bool{return(std::get(std::tuple(args...))==value);};}我不确定要在std::tuple中放什么模板参数。我试过了decltype(args),decltype(args...),auto,auto...,以及其他一些东西,但我不断收到编译器错误。

c++ - 使用带有默认大小写和 lambda 函数的 switch 语句时出现 gcc 错误

我不明白为什么这段代码#includeclassA{public:voidfoo(){charg='m';switch(g){case'g':autof=[](){std::printf("helloworld\n");};f();break;//default://std::printf("gotohell\n");//break;}};};intmain(intiargc,char*iargv[]){Aa;a.foo();}编译(和工作)正常,而取消注释默认语句时#includeclassA{public:voidfoo(){charg='m';switch(g){case'g':