首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++蓝宝石尺寸

C++蓝宝石尺寸
EN

Stack Overflow用户
提问于 2017-10-03 11:33:47
回答 1查看 936关注 0票数 0

这是一个可以调用任何lambda的lambda类的例子。它的目的是用作函子。

代码语言:javascript
复制
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被多个捕获的变量绑定时会发生什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 13:45:20

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

std::function<void()>可以存储任何可以复制和销毁的可调用对象(可以用0参数调用)。它要么将其存储在内部缓冲区(大到足以存储函数指针),要么存储在堆中(如果太大)。

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

它不是羔羊,但它可以储存兰巴达。

在一个联合中存储一个非C++类有点痛苦。如果您有boost::variantstd::variant支持,可以考虑使用c++17

在没有std::functionvariant的情况下解决这个问题是很困难的,如果您想知道如何将一个模板(而不是一个模板实例)存储为数据,那么我将超出您的技能水平。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46543615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档