boost :: вариант рекурсивная проблема - PullRequest
5 голосов
/ 08 февраля 2011

есть ли способ заставить эту работу?Я надеюсь, вы поймете, я пытаюсь создать список с помощью рекурсивных пар

#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 Ответ

4 голосов
/ 08 февраля 2011

Нет.Суть boost :: variable заключается в том, что он имеет фиксированный размер и не выполняет динамическое размещение.Таким образом, это похоже на союз.Рекурсивное повышение :: вариант должно иметь бесконечный размер, чтобы содержать максимально возможное значение - явно невозможное.

Однако вы можете сделать это, передав его через указатель.Например:

struct nil { };

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