boost :: variant递归麻烦

时间:2011-02-08 11:00:46

标签: c++ c++11 boost-variant

有没有办法让这项工作?我希望你能得到这个想法,我试图通过递归对创建一个列表

#include <boost/variant.hpp>
#include <utility>

struct nil {};
typedef boost::make_recursive_variant<nil, std::pair<int, boost::recursive_variant_ >>::type list_t;

int main() {
  list_t list = { 1, (list_t){ 2, (list_t){ 3, nil() } } };
  return 0;
}

1 个答案:

答案 0 :(得分:4)

没有。 boost :: variant的意思是它具有固定的大小,并且不进行动态分配。这样它就像一个联盟。递归boost :: variant必须具有无限大小才能包含其最大可能值 - 显然是不可能的。

但是,您可以通过指针传递它。例如:

struct nil { };

typedef boost::make_recursive_variant<nil, 
    std::pair<int, boost::scoped_ptr<boost::recursive_variant_> > >
        variant_list_int;