Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum ComparisonResult
- {
- less = -1,
- equal = 0,
- greater = 1
- };
- template<typename T>
- class CompareChain : std::binary_function<const T&, const T&, bool>
- {
- typedef boost::function<ComparisonResult( const T& lhs, const T& rhs )> CompareFunctor;
- public:
- CompareChain( const CompareFunctor& f1 )
- {
- functions.push_back( f1 );
- }
- CompareChain( const CompareFunctor& f1, const CompareFunctor& f2 )
- {
- functions.push_back( f1 );
- functions.push_back( f2 );
- }
- CompareChain( const CompareFunctor& f1, const CompareFunctor& f2, const CompareFunctor& f3 )
- {
- functions.push_back( f1 );
- functions.push_back( f2 );
- functions.push_back( f3 );
- }
- bool operator()( const T& lhs, const T& rhs ) const
- {
- BOOST_FOREACH( CompareFunctor f, functions )
- {
- switch( f( lhs, rhs ) )
- {
- case less:
- return true;
- case greater:
- return false;
- }
- }
- return false;
- }
- private:
- std::vector<CompareFunctor> functions;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement