草庐IT

generic-lambda

全部标签

c++ - 可变参数 lambda 捕获的解决方法

我在这里看到了一些与在lambda中捕获可变参数的gcc错误有关的问题。参见示例:Doeslambdacapturesupportvariadictemplatearguments或Compilerbug,ornonstandardcode?-Variadictemplatecaptureinlambda.我有以下我想做的人为的例子#include#includeclassTestVariadicLambda{public:templatestd::functiongetFunc(Args...args){return[=]{printArgs(args...);};}template

λ-矩阵知识点

原文:链接λ-矩阵矩阵的秩定义.若矩阵A\mathbf{A}A的元素为关于λλλ的多项式,则称A\mathbf{A}A为λλλ-矩阵(表示为A(λ)\mathbf{A}(λ)A(λ)).λ\lambdaλ-矩阵也存在秩、初等变换、相抵、逆等概念,但是有一些不同.定义.λ\lambdaλ-矩阵的秩是指最高阶非零子式的阶数.对于方阵而言,若秩等于阶数,则称其为满秩的.定理.方阵满秩的充要条件是行列式非零.定义.λ\lambdaλ-矩阵的初等行变换是指由以下3种行操作构成的矩阵变换:①交换两行;②数乘行;③一行乘以ψ(λ)\psi(\lambda)ψ(λ)倍加到另一行,其中ψ(λ)\psi(\lam

c++ - 模板 lambda 有时无法编译

我想为我的trie数据结构实现一个通用的访问者模式。下面是提取的最小片段,这给编译器带来了麻烦:#includestructNode{size_tlength;};templateclassC{public:size_tlongest=0;std::functionf=[this](Nnode){if(node->length>this->longest)this->longest=node->length;};};intmain(){Noden;n.length=5;Cc;c.f(&n);}它使用g++(Ubuntu/Linaro4.7.2-2ubuntu1)、Ubuntuclang

c++ - 广义 lambda 捕获的宏

我想使用C++14中引入的广义lambda捕获(有关解释,请参阅Movecaptureinlambda)。但是,我的代码的其余部分是C++11友好的。我想按照以下方式做一些事情#ifdefCPP14//movecaptureinlambda#else//captureby-value#endif但是,没有好的交叉编译器标志来推断版本。有什么可以建议的吗?(当然,除了定义我自己的宏) 最佳答案 实际上T.C.是的,C++11FDIS在"16.8Predefinedmacronames[cpp.predefined]"中说那个Thena

c++ - 广义 lambda 的 vector

假设我们有这样一段代码:std::vector>tasks;然后我们添加这样的任务:tasks.push_back([](){//...}这行得通。但现在我们要添加该任务:std::unique_ptrv(newint(10));tasks.push_back([v=std::move(v)](){//...}并且这段代码没有编译。为了更清楚:std::unique_ptrv(newint(10));std::functiontest=[v=std::move(v)](){};存在编译错误。因为lambda的类型不是std::function.但是什么是类型呢?

c++ - 如何将变量移动到 lambda 表达式中?

我看到C++11文档(http://en.cppreference.com/w/cpp/language/lambda)的lambda表达式状态支持按值和引用捕获,但不支持右值引用。我能找到的与此相关的最接近的SO问题是:Howtocaptureaunique_ptrintoalambdaexpression?,但我的用例似乎不需要使用std::bind。代码#include#includeclassFoo{public:explicitFoo(intvalue=0):mValue(value){}//Thefollowingitemsareprovidedjusttobeexplic

c++ - 通过 clang-format 格式化 lambda 背后的逻辑是什么?

我在Emacs(24.5.2版)中使用clang-format(3.5版)。下面是一段由clang-format以LLVM风格格式化的简单代码:intmain(){std::cout";std::stringword;while(std::cin>>word){std::cout";}return0;}请注意它是如何对齐lambda的正文和右括号的。这种格式是否有任何逻辑,或者它只是缺乏对lambda的支持?我需要设置clang-format的配置参数以获得更好的格式吗? 最佳答案 std::accumulate(word.cbeg

c++ - Boost fusion 使用 lambda fold 参数包

在下面的代码中(C++14,C++17中没有“fold”),我试图在编译时使用boostfusionfold、参数包自动计算类字段的固定偏移量和一个lambda。不幸的是,这会导致编译时错误......是否可以这样做?[编辑:其他事情也困扰着我:这不是我想要的。我希望ControlledLayout2的_size在编译时可用(这就是我将其设为静态的原因),而不仅仅是在调用构造函数时可用]templatestructField2{typedefT_type;staticconstuint32_t_size;staticuint32_t_offset;};templateconstuint

c++ - GCC 无法优化涉及成员函数指针的委托(delegate) lambda 函数

我使用GCC4.9.2和clang3.6.0编译了以下c++14代码。我使用了-O3标志。#includestructS{inta;intA()const{returna;}};templateintFunc(F&&f,Args&&...args){returnf(std::forward(args)...);}usingPtrA=int(S::*)()const;intF(Sconst&s,PtrAptr){return(s.*ptr)()*5;}intp(Sconst&s){returns.A()*5;}intP1(Sconst&s){returnFunc(&F,s,&S::A);

c++ - 将函数指针实现替换为 std::function 以在 PlayFab SDK 中使用 lambda

我目前正在尝试包含PlayFabC++SDK进入我的应用程序。该SDK主要针对游戏引擎Cocos2d-x,但基本上可以用于任何C++应用。它只是普通的REST,因此您向他们的服务器发送请求并等待响应。这非常适合使用lambda。他们声明了这个回调,当请求成功时调用:templateusingProcessApiCallback=void(*)(constResType&result,void*userData);不幸的是,他们没有使用std::function,而是一个函数指针。这样就不能使用捕获变量的lambda。因此,我想我可以简单地用std::function回调替换这个函数指针