强制提升变体以存储指针
Force boost variant to store pointer
我使用boost::variant 进行存储,一个可能的数据成员是一个大型结构。所以二进制变体的大小至少是这个结构大小。在我的情况下,所有其他成员都非常小,例如 int 或 double。为了避免基本的大布局,有没有办法强制 boost::variant 将项目存储为指针?当然,我可以使用智能指针来存储这个大结构,但在这种情况下,get Methode 也可以用作指针访问。这不太好
boost::variant<int,double,large_struct>>
大小为 500 字节
或者另一个小解决方案,但每个访问都必须处理指针
boost::variant<int,double,shared_ptr<large_struct>
大小为 40 字节
是的,您可以将变体声明为
boost::variant<int,double,boost::recursive_wrapper <large_struct>>>
递归包装通常用于在声明变体时large_struct
是不完整类型的情况。例如,如果此变体需要成为 large_struct
的成员怎么办。
recursive_wrapper<T>
内部只是一个指针T*
,但变体知道这个指针并透明地为您取消引用它。这是当它需要成为指针的事实是您不希望用户必须考虑的"细节"时。
不过,它非常适合您的用例。使用 recursive_wrapper<large_struct>
而不是 large_struct
会使 large_struct
实例在堆上生存,但提供与没有递归包装器完全相同的接口和用法。
相关文章:
- 存储指针值需要多少位
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- 为什么unique_ptr向量是存储指针的首选方法
- 我应该如何在Qt中存储指针
- 强制提升变体以存储指针
- 更好的是:存储对象与存储指针
- 在课堂上存储指针
- c++在存储指针元组时遇到问题
- 尝试学习boost::interactive Q3-在IC中存储指针时,我应该使用smart_pointer吗
- boost::numeric::ublas::矢量内部数据存储指针
- QList如何决定是存储指针还是存储项目本身
- 这些存储指针数组的方法之间有区别吗
- Boost属性树:如何在其中存储指针
- 在std::容器中选择存储值还是存储指针时的注意事项
- 在 std::vector 中存储指针会破坏连续内存存储的优势
- 设置不存储指针集合
- 在类中存储指针或对象
- 如何存储指针的矢量,包含不同的类型
- C++:字段对象可以在不存储指针的情况下知道其"parent"吗?
- 如何为在 std::map 中存储指针的模板类编写复制构造函数