如何将同质的fusion::向量转换为(std/boost)::数组
How to convert a homogeneous fusion::vector to an (std/boost)::array
我对boost比较陌生,所以我认为这是一个简单的问题:
给定一个fusion::vector<int, int, int>
,我需要一个好方法把它变成array<int, 3>
。
您可以使用array<>
(std或boost)和copy
的内置适配:
Live On Coliru
#include <boost/fusion/include/copy.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
#include <boost/array.hpp>
using namespace boost;
int main() {
fusion::vector<int, int, int> fv(1,2,3);
array<int, 3> arr;
fusion::copy(fv, arr);
}
基于@sehe的答案,您还可以使用fusion::invoke
来摆脱未初始化的数组。
#include <boost/fusion/functional/invocation/invoke.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
#include <boost/array.hpp>
using namespace boost;
#include <iostream>
int main() {
fusion::vector<int, int, int> fv(1,2,3);
auto arr = fusion::invoke([](int x, int y, int z){return array<int, 3>{x, y, z};}, fv);
for(auto i : arr)
std::cout << i << " ";
}
在c++ 14中变得更有吸引力
auto arr = fusion::invoke([](auto... xs){return array<int, 3>{xs...};}, fv);
和c++ 17中的
auto arr = fusion::invoke([](auto... xs){return std::array{xs...};}, fv);
相关文章:
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- std::boost::asio::p ost / dispatch 使用哪个io_context?
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- 如何将 boost::hana::tuple 转换为 std::变体
- Boost.Asio:不能使用 std::bind() 来指定回调
- 如何使用 boost::future 重新抛出 std::exception_ptr 存储的原始异常?
- Boost Variant 是否提供与 std holds_alternative类似的功能?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- Boost Json 写入错误:调用 'boost::p roperty_tree::basic_ptree<std::__cxx11
- 在C++中使用std或boost库的Qtimer等价物是什么
- 在VC2015U3上,std::regex比boost::regex慢得多
- 如何正确地将 boost::optional<std::chrono::d uration> 作为函数参数?
- Hana BOOST _Hana_DEFINE_STRUCT不适用于std::unique_ptr
- std(boost)::文件系统::p ath 组件数
- 调整 C++ std/boost iostream 以提供对内存块的循环写入
- 如何停止std/boost::线程复制我的对象而不是传递引用
- Std:: boost::数组列表
- 对std/boost移动的调用不明确
- 如何将同质的fusion::向量转换为(std/boost)::数组