首页 > 解决方案 > 类初始化中的静态 lambda

问题描述

我正在尝试在类中初始化 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++lambdainitialization

解决方案


从 C++17 开始,lambda 可以是constexpr( P0170R1 ),但是所有编译器都不支持它,因此取决于您的编译器,它可能会或可能不会工作(g++ 从版本 7 开始支持此功能,intel 编译器将提供此功能从 19.0 开始)。

作为一种解决方法,您可以使用decltype来实现static constlambda 成员

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

推荐阅读