
on Tue Jul 17 2007, "Peng Yu" <pengyu.ut-AT-gmail.com> wrote:
On 7/17/07, David Abrahams <dave@boost-consulting.com> wrote:
on Tue Jul 17 2007, "Peng Yu" <pengyu.ut-AT-gmail.com> wrote:
I saw list in mpl. But I'm not familiar with it yet. Would you please show me how to do the same thing in mpl as that in my original email?
typedef boost::mpl::list<Rect_, Square_, Triangle_, RightTriangle_> Shapes_;
Hi,
I actually meant to define a visitor class for those shapes like the following. Is there anything similar to type_list::head and type_list::tail in mpl::list?
Well, there is, but in general you don't do it that way. You'd want to write code that works just as well with typedef boost::mpl::vector<Rect_, Square_, Triangle_, RightTriangle_> Shapes_; All those virtual functions are a waste of time; none of them override the others. AFAICT all you're really trying to do is generate an overload set on the elements of Shapes_. struct base_visitor { void visit(); }; template <class T, class Base> struct visitor : Base { void visit(T&) { /*...*/ } using Base::visit; }; typedef mpl::fold<Shapes_, base_visitor, visitor<_2,_1> >::type v; HTH, -- Dave Abrahams Boost Consulting http://www.boost-consulting.com The Astoria Seminar ==> http://www.astoriaseminar.com