代码之家  ›  专栏  ›  技术社区  ›  P.Carlino

静态lambda类内初始化

  •  2
  • P.Carlino  · 技术社区  · 8 年前

    我正在尝试初始化 类中的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 回复  |  直到 8 年前
        1
  •  0
  •   Kai Guther    8 年前

    至于C++ 17,lambdas可以是 constexpr ,,( P0170R1 )不过,这在所有编译器上都不受支持,因此根据编译器的不同,它可能工作,也可能不工作(G++自版本7起支持此功能,英特尔编译器将从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};