boost — Recursive Typedef в переполнении стека

Я хочу написать определение типа в c ++, но не знаю, является ли то, что я хочу реализовать, законным. Допустим, я хочу сделать typedef вектора типов вариантов boost, которые указывают на int, или другого вектора того же типа. Итак, это будет законно, и компилятор будет жаловаться?

typedef std::vector<boost::variant<int *, boost::variant<int *, IntBranch*>> IntBranch;

2

Решение

Ты можешь использовать boost::make_recursive_variant для этой цели:

#include <boost/variant.hpp>

typedef boost::make_recursive_variant<
int*,
std::vector< boost::recursive_variant_ >
>::type IntBranch;

И вот как вы бы это использовали:

#include <vector>

int main()
{
typedef boost::make_recursive_variant<
int*,
std::vector< boost::recursive_variant_ >
>::type IntBranch;

int x = 42;
IntBranch ib = &x;

std::vector<IntBranch> v;
v.push_back(ib);

IntBranch ib2 = v;

// ...
}

И вот живой пример.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]