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 に答える