【问题标题】:Static lambda in class initialization类初始化中的静态 lambda
【发布时间】:2018-07-06 10:01:53
【问题描述】:

我正在尝试初始化 类中的 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++ constexpr lambda 从 c++17 开始
  • 我用的是c++11
  • 我无法使用 C++11 和 C++17 进行复制。
  • lambda as a static member的可能重复
  • 如果我使用 c++17 编译,那么@Tyker 谢谢

标签: c++ lambda initialization


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多