Boost logo

Boost :

Subject: [boost] [any] Multimethod for boost::any and modified boost::any to fit multi method
From: nowake_at_[hidden]
Date: 2009-02-12 08:23:56


Hi All.

I create multi method for boost::any using Modern C++ Design's
multi method technique.

It can dispatch method dynamically like this:
_________________________________________________________________________
struct T1 {
   string operator()(int value) const { return string("T1(int)"); };
   string operator()(double value) const { return string("T1(double)"); };
   string operator()(A value) const { return string("T1(A)"); };
};
// "entry" to Multi method
bool t10(Multimethod::entry<any, any, T1, int>());
bool t11(Multimethod::entry<any, any, T1, double>());
bool t12(Multimethod::entry<any, any, T1, A>());

struct T2 {
   string operator()(int value) const { return string("T2(int)"); };
};
// "entry" to Multi method
bool t20(Multimethod::entry<any, any, T2, int>());

BOOST_AUTO_TEST_CASE(test04)
{
   any m((T1()));
   any a(0);
   BOOST_CHECK_EQUAL(
         any_cast<string>(Multimethod::apply<any>(m, a)),
         "T1(int)");
   a = 0.0;
   BOOST_CHECK_EQUAL(
         any_cast<string>(Multimethod::apply<any>(m, a)),
         "T1(double)");
   a = A();
   BOOST_CHECK_EQUAL(
         any_cast<string>(Multimethod::apply<any>(m, a)),
         "T1(A)");

   m = T2();
   a = 0;
   BOOST_CHECK_EQUAL(
         any_cast<string>(Multimethod::apply<any>(m, a)),
         "T2(int)");
};
__________________________________________________________________________

If you are interested in this multi method, please see #2749 for detail.
https://svn.boost.org/trac/boost/ticket/2749

Thanks,
Nowake


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk