[TypeErasure] Similar simple class.

Hi All, I have implemented xany class https://sourceforge.net/projects/extendableany/?source=directory. Then I noticed that there is a Boost.TypeErasure library which allows to do same as xany does and something more. Implementation of class xany has 1005 lines and it is implemented and tested in a week. Of course xany isn't comparable with Boost.TypeErasure, but it may be interesting to look. Below is a definition of same method for Boost.TypeErasure and for xany. // definition of push_back for Boost.TypeErasure template<class C, class T> struct push_back { static void apply(C& cont, const T& arg) { cont.push_back(arg); } }; namespace boost { namespace type_erasure { template<class C, class T, class Base> struct concept_interface< ::push_back<C, T>, Base, C> : Base { void push_back(typename rebind_any<Base, const T&>::type arg) { call(::push_back<C, T>(), *this, arg); } }; } } any<push_back<_self, int>, _self&> c; // definition of push_back for xany template <typename Xany, typename T> struct push_back_method { typedef void (Xany::* signature) (const T&); template <typename B> struct wrapper : public B { void push_back(const T& e) { this->call(push_back_method(), e); } }; struct implementation { template <typename Container> void operator() (Container& c, const T& e) { c.push_back(e); } }; }; xany<boost::mpl::vector<push_back_method<boost::mpl::_1, int> > > c; xany requires additional signature type to be specified. This allows to use dispatching in implementation. struct implementation { void operator() (OtherCodingStyleContainer& c, const T& e) { c.PushBack(e); } template <typename Container> void operator() (Container& c, const T& e) { c.push_back(e); } }; Documentation contains more examples.
participants (1)
-
Arman Hunanyan