如何将mpl::vector中的c元素转换成fusion::vector?
- 内容介绍
- 文章标签
- 相关推荐
本文共计524个文字,预计阅读时间需要3分钟。
从 `empl :: vector` 生成 `fusion :: vector`,以及从 `fusion :: vector` 生成 `mpl :: vector` 的过程如下:
1. 从 `empl :: vector` 生成 `fusion :: vector`: 使用 Boost.MPL 的 `generate_fusion_vector` 函数可以将 `empl :: vector` 转换为 `fusion :: vector`。这个过程涉及到类型融合技术,它可以将多个类型组合成一个单一的复合类型。
2. 从 `fusion :: vector` 生成 `mpl :: vector`: 使用 Boost.MPL 的 `is_same` 函数可以比较两个类型是否相同,从而确保转换的正确性。具体操作如下:
cpp#include #include #include
using namespace boost::mpl;
// 检查 fusion::vector 是否为 int 和 char 的组合BOOST_MPL_ASSERT((is_same
// 检查 mpl::vector 是否为 intBOOST_MPL_ASSERT((is_same
这里,`generate_fusion_vector` 生成一个 `fusion :: vector`,其中包含类型 `int` 和 `char`。而 `is_same` 函数确保类型匹配。
如何从mpl :: vector生成fusion :: vector?如何从fusion :: vector生成mpl :: vector?
BOOST_MPL_ASSERT((is_same< fusion::vector<int, char>, generate_fusion_vector<mpl::vector<int, char> >::type >)); BOOST_MPL_ASSERT((is_same< mpl::vector<int, char>, generate_mpl_vector<fusion::vector<int, char> >::type >));
我需要generate_fusion_vector和generate_mpl_vector元函数.
我可以编写自己的元函数,但我怀疑它们已经存在.
我曾经有过使用help_of :: as_map生成fusion :: map的经验,但是在当前的boost(trunk,也是1.39)中会出现这样的错误:
D:\Libraries\boost_trunk\boost/fusion/sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol is neither a class template nor a function template D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) : see reference to class template instantiation 'boost::fusion::result_of::size' being compiled with [ Sequence=boost::mpl::vector ] temp.cpp(71) : see reference to class template instantiation 'boost::fusion::result_of::as_vector' being compiled
我不明白发生了什么事?
由于fusion接受mpl类型作为函数的参数,您可以尝试这样做:BOOST_MPL_ASSERT((is_same< fusion::vector<int, char>, fusion::result_of::as_vector<mpl::vector<int, char> >::type >));
编辑:
我认为这对你不起作用的原因是你必须包含某些头文件才能在融合中实现mpl兼容性.
#include <boost/fusion/adapted/mpl.hpp> #include <boost/fusion/include/mpl.hpp>
本文共计524个文字,预计阅读时间需要3分钟。
从 `empl :: vector` 生成 `fusion :: vector`,以及从 `fusion :: vector` 生成 `mpl :: vector` 的过程如下:
1. 从 `empl :: vector` 生成 `fusion :: vector`: 使用 Boost.MPL 的 `generate_fusion_vector` 函数可以将 `empl :: vector` 转换为 `fusion :: vector`。这个过程涉及到类型融合技术,它可以将多个类型组合成一个单一的复合类型。
2. 从 `fusion :: vector` 生成 `mpl :: vector`: 使用 Boost.MPL 的 `is_same` 函数可以比较两个类型是否相同,从而确保转换的正确性。具体操作如下:
cpp#include #include #include
using namespace boost::mpl;
// 检查 fusion::vector 是否为 int 和 char 的组合BOOST_MPL_ASSERT((is_same
// 检查 mpl::vector 是否为 intBOOST_MPL_ASSERT((is_same
这里,`generate_fusion_vector` 生成一个 `fusion :: vector`,其中包含类型 `int` 和 `char`。而 `is_same` 函数确保类型匹配。
如何从mpl :: vector生成fusion :: vector?如何从fusion :: vector生成mpl :: vector?
BOOST_MPL_ASSERT((is_same< fusion::vector<int, char>, generate_fusion_vector<mpl::vector<int, char> >::type >)); BOOST_MPL_ASSERT((is_same< mpl::vector<int, char>, generate_mpl_vector<fusion::vector<int, char> >::type >));
我需要generate_fusion_vector和generate_mpl_vector元函数.
我可以编写自己的元函数,但我怀疑它们已经存在.
我曾经有过使用help_of :: as_map生成fusion :: map的经验,但是在当前的boost(trunk,也是1.39)中会出现这样的错误:
D:\Libraries\boost_trunk\boost/fusion/sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol is neither a class template nor a function template D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) : see reference to class template instantiation 'boost::fusion::result_of::size' being compiled with [ Sequence=boost::mpl::vector ] temp.cpp(71) : see reference to class template instantiation 'boost::fusion::result_of::as_vector' being compiled
我不明白发生了什么事?
由于fusion接受mpl类型作为函数的参数,您可以尝试这样做:BOOST_MPL_ASSERT((is_same< fusion::vector<int, char>, fusion::result_of::as_vector<mpl::vector<int, char> >::type >));
编辑:
我认为这对你不起作用的原因是你必须包含某些头文件才能在融合中实现mpl兼容性.
#include <boost/fusion/adapted/mpl.hpp> #include <boost/fusion/include/mpl.hpp>

