这是一个可以调用任何lambda的lambda类的例子。它的目的是用作函子。
template<class T>
struct lambda_class {
T lambda;
void operator()(){ lambda();}
};这个班有尺寸保证吗?我需要的是将它存储在一个联合中,但是在没有特定模板参数的情况下,我不能将它放在一个联合中。为此,我需要知道λ的最大尺寸是多少。当它是特定于编译器的时候并不重要。
编辑1:是的,我的意图是了解std::函数是如何在内部实现的。出于这个原因,我选择了EASTL来理解,因为它与gnu libstdc++相比可读性很好。
下面的链接包含函数实现的代码,该代码似乎只使用contains:https://github.com/electronicarts/EASTL/blob/master/include/EASTL/internal/function.h
我不知道的是,为什么它适合于存储类型?第131行和第141行包含函子和分配器的结构定义。当lambda被多个捕获的变量绑定时会发生什么?
发布于 2017-10-03 13:45:20
你似乎想要一个std::function<void()>。
std::function<void()>可以存储任何可以复制和销毁的可调用对象(可以用0参数调用)。它要么将其存储在内部缓冲区(大到足以存储函数指针),要么存储在堆中(如果太大)。
它通过一种称为类型擦除的机制来实现这一点。
它不是羔羊,但它可以储存兰巴达。
在一个联合中存储一个非C++类有点痛苦。如果您有boost::variant或std::variant支持,可以考虑使用c++17。
在没有std::function和variant的情况下解决这个问题是很困难的,如果您想知道如何将一个模板(而不是一个模板实例)存储为数据,那么我将超出您的技能水平。
https://stackoverflow.com/questions/46543615
复制相似问题