类初始化中的静态lambda

时间:2018-07-06 10:01:53

标签: 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){

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

1 个答案:

答案 0 :(得分:0)

从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};