Boost logo

Boost Users :

Subject: [Boost-users] variant over base and derived classes
From: Hicham Mouline (hicham_at_[hidden])
Date: 2010-12-08 19:04:13


hello,

How to determine the actual type of the object stored in a variant?

struct S {
  virtual ~S()
  {}
};

struct Deriv1 : public S {
  virtual ~Deriv1()
  {}
};

struct Deriv2 : public S {
  virtual ~Deriv2()
  {}
};

struct Deriv3 : public Deriv2 {
  virtual ~Deriv3()
  {}
};

typedef boost::variant<S,Deriv1, Deriv2, Deriv3> my_variant_t;

Deriv3 d3;

struct print_type: public boost::static_visitor<> {
  template <typename T>
  void operator()(const T&) const
  {
    std::cout<< typeid(T).name() <<std::endl;
  }
};

const S& s = d3;
my_variant_t v = s;
boost::apply_visitor( print_type(), v );

This prints S.

Is it a truncated copy of d3 that is stored v?
How do I construct v polymorphically so that the real object is stored?

regards,


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net