"Peter Dimov" <[EMAIL PROTECTED]> writes: > David Abrahams wrote: >> >> FWIW, Boost.Function is overkill for many simple cases. This might >> be a case where the FS library should just provide a class with a >> virtual function: >> >> struct checker >> { >> virtual ~checker() {} >> virtual bool operator()( std string const& ) = 0; >> >> shared_ptr<checker> next; // suggested. >> }; > > Boost.Function makes things simpler for the user. > > enum check_type { check_posix, check_windows, ... }; > bool my_name_checker(std::string const & s, check_type t); > > Compare > > bind(my_name_checker, _1, check_posix) > > against
<snip> So I left out a few bits: struct checker_impl_base { virtual ~checker() {} virtual bool operator()( std string const& ) const = 0; }; template <class F> struct checker_impl : checker_impl_base { checker_impl(F const& f) : m_f(f) {} bool operator()( std string const& s ) const { return m_f(s); } }; struct checker { template <class F> checker(F const& f) : m_impl(new checker_impl<F>(f)) {} bool operator()( std string const& s ) const { return (*m_impl)(s); } shared_ptr<checker_impl_base> m_impl; shared_ptr<checker_impl_base> m_next; // suggested. }; Still smaller (and probably a little more portable) than Boost.Function. > It is still possible to substitute a homegrown function<bool(string)> (or > function<bool(char const *)>) equivalent for portability reasons, of > course. I guess that's done now? -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost