
AMDG On 05/30/2012 01:30 AM, Thomas Petit wrote:
<snip> Now what are the minimal, non-intrusive modifications using Boost.TypeErase we have to make so we can write in a value-based style, with regular types ? Can we achieve something like this ? :
-------------- std::vector<any<printable>> printers; printers.push_back(separator_printer(",")); printers.push_back(column_separator_printer(",", 4)); for(any<printable>& printer : printers) { printer->print(std::cout, test); } -------------
template<class T = _self> struct printable { static void apply(const T& t, std::ostream& os, const std::vector<int>& v) { t.print(os, v); } }; namespace boost { namespace type_erasure { template<class T, class Base> struct concept_interface< ::printable<T>, Base, T> : Base { void print(std::ostream& os, const std::vector<int>& v) const { call(printable<T>(), *this, os, v); } }; }} The two differences in usage are that you have to use printable<> and printer.print(std::cout, test). In Christ, Steven Watanabe