C++ lambda size
C++ lambda size
这是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::variant
或std::variant
。
在没有std::function
和variant
的情况下解决此问题,如果您想知道如何将模板(而不是模板实例)作为数据存储。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 可组合的lambda/std::函数与std::可选
- 大于65535的C++数组[size]引发不一致的溢出
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么(-1)%vector::size()总是返回0
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- C++ lambda size