c++ - 类初始化中的静态 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++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};
推荐阅读
- tensorflow - Tensorflow 精度远低于预期
- android - 有没有办法在android中保存变量(BluetoothGatt对象)
- java - 在 Java 版本升级为基础映像后,Openshift Pod 无法运行
- python - 在 django formview 中传递表单实例
- java - 使用 PDFBox 将存储为字节数组的图像添加到 PDF
- topic-modeling - 我们可以恢复 MALLET 模型的训练吗?
- jmeter - 在 JMeter 中使用 Blazemeter HTTP2 采样器时出现 TimeoutException
- c# - 为什么 Visual Studio 将所有新类标记为
在我的 csproj 文件中? - python - 如何将 python 程序转换为 Azure 函数?
- java - 我可以用 Java 替换 SQL*Loader 代码来读取 ctl 文件以上传重文件而不影响性能吗?