|
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