我正在尝试初始化一个 类里面的 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/