c++ - 类初始化中的静态 lambda

标签 c++ lambda initialization

我正在尝试初始化一个 类里面的 lambda 表达式。 伪代码可能是这样的

class A{
  //stuff..
  static constexpr auto lambda = [] (unsigned char element){//stuff..};

};

当我尝试编译时,我得到了这个错误信息

 error: ‘constexpr const A::<lambda(unsigned char)> A::get_range’, declared using local type ‘const A::<lambda(unsigned char)>’, is used but never defined [-fpermissive]
 static constexpr auto lambda = [](unsigned char element){

我如何在类初始化中执行此操作? 真的谢谢你,对不起英语。

最佳答案

从 C++17 开始,lambda 可以是 constexpr,( P0170R1 ) 然而,这并不是所有编译器都支持的,因此根据您的编译器,它可能会或可能不会工作 ( g++ 从版本 7 开始支持此功能,intel 编译器将从 19.0 开始支持它。

作为解决方法,您可以使用decltype 来实现static const lambda 成员

auto lambda = [](unsigned char element){};
class A{
   //stuff
   static const decltype(lambda) a;
};
const decltype(lambda) A::a{lambda};

关于c++ - 类初始化中的静态 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51207875/

相关文章:

c++ - win32 GUI 在窗口中显示来自 char 数组变量的文本

c++ - Vector 的最后一个元素在复制和从复制中弹出后发生变化

c++ - 在运算符重载中返回 this 或 *this ?

R匿名函数: capture variables by value

c++ - 我的调试器运行的代码似乎与我正在构建的代码不同

java - 如何将特定比较器转换为 Lambda 表达式?

java - 如何获取 Java 8 方法引用的 MethodInfo?

c - C中的三元搜索树,指向结构体指针的问题

java - 变量已初始化但已初始化时出错?

c++ - 调用非默认构造函数作为成员初始化