C++ lambda size

C++ lambda size

本文关键字:size lambda C++      更新时间:2023-10-16

这是Cann称为任何lambda的lambda类的示例。它旨在用作函子。

template<class T>
struct lambda_class {
 T lambda;
 void operator()(){ lambda();}
};

该课程是否有任何尺寸保证。我需要的是将其存储在工会中,但没有特定的模板参数,我无法将其放入联合中。为此,我需要知道Lambda的最大尺寸是多少。特定于编译器的何时都没关系。

编辑1:是的,我的目的是了解内部实现STD ::功能。因此,我选择了EASTL来理解,因为与GNU LIBSTDC 相比,它可以理解。

以下链接包含函数实现的代码,该函数似乎仅使用新的位置:https://github.com/electronicarts/eastl/blob/master/include/eastl/internal/function.h

我不伸出来的是为什么它适合存储类型?第131和141行包含函子和分配器的结构定义。当Lambda与多个捕获的变量绑定时会发生什么?

您似乎想要一个std::function<void()>

std::function<void()>可以存储任何可复制和破坏的可呼叫对象(可以用0个参数调用)。它要么将其存储在内部缓冲区中(足够大以存储功能指针),要么将其存储在堆中(如果太大)。

它通过一种称为类型擦除的机制来做到这一点。

它不是lambda,但可以存储lambdas。

将非POD C 类存储在联合中有点痛苦。如果您有C 17支持,请考虑使用boost::variantstd::variant

在没有std::functionvariant的情况下解决此问题,如果您想知道如何将模板(而不是模板实例)作为数据存储。