Gus*_*avo 0 c++ lambda templates c++11
这是一个无法调用任何 lambda 的 lambda 类的示例。它旨在用作函子。
template<class T>
struct lambda_class {
T lambda;
void operator()(){ lambda();}
};
Run Code Online (Sandbox Code Playgroud)
此类是否有任何尺寸保证。我需要的是将它存储在联合中,但如果没有特定的模板参数,我不能将它放入联合中。为此,我需要知道 lambda 的最大大小是多少。它何时是特定于编译器的并不重要。
编辑 1: 是的,我的目的是了解 std::function 是如何在内部实现的。出于这个原因,我选择 EASTL 进行理解,因为与 gnu libstdc++ 相比,它的可读性非常好。
以下链接包含功能实现的代码,该代码似乎仅使用了placement new:https : //github.com/electronicarts/EASTL/blob/master/include/EASTL/internal/function.h
我不明白的是为什么它适合存储类型?第 131 和 141 行包含函子和分配器的结构体定义。当 lambda 与多个捕获的变量绑定时会发生什么?
你似乎想要一个std::function<void()>.
std::function<void()>可以存储任何可以复制和销毁的可调用对象(可以使用 0 个参数调用)。它要么将其存储在内部缓冲区(大到足以存储函数指针)中,要么存储在堆中(如果它太大)。
它通过一种称为类型擦除的机制来做到这一点。
它不是 lambda,但它可以存储 lambda。
在联合中存储非 POD C++ 类有点麻烦。如果您有c++17支持,请考虑使用boost::variantor 。std::variant
如果您想知道如何将模板(而不是模板实例)存储为数据,那么在没有std::function和variant我的情况下解决这个问题会很困难,并且超出您的技能水平几步。