c++ - 如何将 std::array 转换为 std::tuple?
问题描述
我正在开发一个辅助模块来在多态对象之间传递值,并且在某些时候我有
std::array<void*, N>
并且需要转发
std::tuple<void*, void*, /* N times */>
我可以使用index_sequence
或/和递归找到一些解决方案,但所有这些看起来都很庞大且难以阅读。
有没有更直接的方法可以通过标准库来做到这一点?
另外,以防万一 - 我的布局std::array
是一组密集的相应对象,因此等于,比如说,void**
相应的长度,而元组的布局允许间隙,我是对的吗?
解决方案
如果您的实现支持它,您可以使用std::tuple_cat
. 在某些实现下,它将任何数量的尊重元组接口(std::array
确实如此)的对象连接成单个平面元组。连接一个像对象一样的元组只会产生一个元组,它包含所述源“元组”成员的副本。
std::array<void*, N> a;
auto b = std::tuple_cat(a);
另外,以防万一 - 我的布局
std::array
是一组密集的相应对象,因此等于,比如说,void**
相应的长度,而元组的布局允许间隙,我是对的吗?
Astd::array
是一个集合,将在void*[N]
内部保存一个。所以是的,元素之间将没有填充。元组元素的布局没有指定到这样的程度。
推荐阅读
- python - 重新保存上传的文件影响文件格式 - 烧瓶
- typescript - window.openDatabase 不是moodle 3.8 Ionic 应用程序中的函数错误
- python - 单击时 Django 显示另一个模型属性
- java - mUserListLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayout.VERTICAL, false); 不工作
- windows - 带有西里尔符号的 Qml 奇怪行为
- php - TYPO3 扩展“ke_search”的分页链接缺少一些参数并且无法正常工作。怎么修?
- laravel - 我可以在 laravel 中定义日志文件的结构吗?
- python - 在 DataFrame 中将值从列翻转到行
- excel - 通过变量将工作表或数据从一个工作簿添加到另一个工作簿
- android - Android Studio 不保存 github 访问令牌