gpt4 book ai didi

c++ - 用于模板化自引用结构的 Boost Fusion 自适应声明

转载 作者:行者123 更新时间:2023-11-30 02:46:24 25 4
gpt4 key购买 nike

我正在尝试声明一个自引用树状结构,该结构以该结构可以容纳的数据类型为模板。在尝试为此结构声明 boost fusion 模板适应定义时,我遇到了编译错误。谁能帮忙?

#include <iostream>
#include <string>
#include <memory>
#include <vector>

#include <boost/lexical_cast.hpp>
#include <boost/dynamic_bitset.hpp>

#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>

struct A
{
int a_val;
A() : a_val(0) {}
A(int a) : a_val(a) {}

friend std::ostream& operator<<(std::ostream &output, A &a_obj)
{
output << a_obj.a_val;
return output;
}
};

template <typename tree_type_t>
struct simple_tree_t
{
simple_tree_t() {}
simple_tree_t( tree_type_t t_obj):tree_data(t_obj) {}
tree_type_t tree_data;

std::vector < std::shared_ptr < tree_type_t > > sub_tree;

typedef typename std::vector < std::shared_ptr < tree_type_t > >::iterator sub_tree_iterator;

sub_tree_iterator sub_tree_begin() { return sub_tree.begin(); }
sub_tree_iterator sub_tree_end() { return sub_tree.end(); }

friend std::ostream& operator<<(std::ostream &output, simple_tree_t &tree)
{
output << tree.tree_data;
std::for_each ( tree.sub_tree_begin(),
tree.sub_tree_end(),
([&](const std::shared_ptr < A > f){
output << *f;
}) );
return output;
}
};

BOOST_FUSION_ADAPT_STRUCT ( A,
(int , a_val) )

BOOST_FUSION_ADAPT_TPL_STRUCT ( (tree_type_t)
(simple_tree_t) (tree_type_t)
(tree_type_t, tree_data)
(typename std::vector < std::shared_ptr < tree_type_t > > , sub_tree) )

int main(void)
{
simple_tree_t<A> t_i, t_o;

t_i.tree_data = A(10);
t_i.sub_tree.push_back(std::make_shared<A>(A(20)));
t_i.sub_tree.push_back(std::make_shared<A>(A(30)));

std::cout << t_i << std::endl;

return 0;
}

最佳答案

@cv_and_he 是对的; <强> Live On Coliru

BOOST_FUSION_ADAPT_TPL_STRUCT ( (tree_type_t),
(simple_tree_t) (tree_type_t),
(tree_type_t, tree_data)
(typename std::vector < std::shared_ptr < tree_type_t > > , sub_tree) )

关于c++ - 用于模板化自引用结构的 Boost Fusion 自适应声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593733/

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