5

有什么办法可以使这项工作?我希望你能明白,我正在尝试通过递归对创建一个列表

#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;
}
4

1 回答 1

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;
于 2011-02-08T11:20:03.943 回答