gpt4 book ai didi

c++ - 从复杂(嵌套)mpl 序列转换而来的 boost::fusion::result_of::as_set(或 as_vector)

转载 作者:太空狗 更新时间:2023-10-29 23:09:07 25 4
gpt4 key购买 nike

#include <iostream>
#include <boost/fusion/mpl.hpp>
#include <boost/fusion/include/mpl.hpp>
#include <boost/fusion/container/set.hpp>
#include <boost/fusion/include/at_key.hpp>
#include <boost/fusion/include/as_set.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/set.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/insert.hpp>

struct node_base
{
int get() {return 123;}
};
struct node_a : public node_base
{};
struct node_b : public node_base
{};
struct node_c : public node_base
{};

typedef boost::mpl::vector3<
::boost::mpl::vector1<node_a>
,::boost::mpl::vector1<node_b>
,::boost::mpl::vector1<node_c>
>::type nested_vec_type;

typedef ::boost::mpl::fold<
nested_vec_type
, ::boost::mpl::set<>
, ::boost::mpl::insert<
::boost::mpl::placeholders::_1
, ::boost::mpl::front<::boost::mpl::placeholders::_2>
>
>::type restored_set_type;

typedef ::boost::fusion::result_of::as_set<restored_set_type> restored_fusion_set;

restored_fusion_set my_restored_set;

int main()
{
std::cout << boost::fusion::at_key<node_a>(my_restored_set).get() << std::endl;
std::cout << boost::fusion::at_key<node_b>(my_restored_set).get() << std::endl;
std::cout << boost::fusion::at_key<node_c>(my_restored_set).get() << std::endl;
return 0;
}



error C2039: 'category' : is not a member of 'boost::fusion::result_of::as_set<Sequence>'
error C2039: 'type' : is not a member of 'boost::fusion::result_of::end<Sequence>'
error C2504: 'boost::fusion::extension::end_impl<Tag>::apply<Sequence>' : base class undefined
error C2039: 'type' : is not a member of 'boost::fusion::result_of::begin<Sequence>'
error C2504: 'boost::fusion::extension::begin_impl<Tag>::apply<Sequence>' : base class undefined
error C2065: 'type' : undeclared identifier

从简单的 mpl 序列(如::boost::mpl::vector< node_a, node_b, node_c >)到融合序列的转换工作正常。但是当我尝试将经过后处理的 mpl 序列从复杂的 mpl 序列(如嵌套的 mpl vector )转换为融合序列(通过 result_of::as_set 或 as_vector)时出现编译时错误。

“restored_set_type”的打印输出是:

struct node_c
struct node_b
struct node_a

,但它似乎丢失了一些类型信息,这使得它不同于简单的 mpl 序列::boost::mpl::vector< node_c, node_b, node_a > 。

我是否遗漏了任何需要指定的内容,例如标签、大小或?谢谢!

最佳答案

解决方案比最初看起来要简单得多! :)

你错过了一些关键的东西:

typedef ::boost::fusion::result_of::as_set<restored_set_type> restored_fusion_set;

不正确,你需要的是:

typedef ::boost::fusion::result_of::as_set<restored_set_type>::type restored_fusion_set;

您只是错过了 ::type因此 restored_fusion_set类型实际上是 as_set<restored_set_type> - 这不是必需的。

关于c++ - 从复杂(嵌套)mpl 序列转换而来的 boost::fusion::result_of::as_set(或 as_vector),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com