Я хочу написать определение типа в c ++, но не знаю, является ли то, что я хочу реализовать, законным. Допустим, я хочу сделать typedef вектора типов вариантов boost, которые указывают на int, или другого вектора того же типа. Итак, это будет законно, и компилятор будет жаловаться?
typedef std::vector<boost::variant<int *, boost::variant<int *, IntBranch*>> IntBranch;
Ты можешь использовать 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;
// ...
}
И вот живой пример.
Других решений пока нет …