template<typename T>
CompareChain<T> MakeCompareChain( const typename CompareChain<T>::CompareFunctor& f1 )
{
return CompareChain<T>( f1 );
}
template<typename T>
CompareChain<T> MakeCompareChain( const typename CompareChain<T>::CompareFunctor& f1,
const typename CompareChain<T>::CompareFunctor& f2 )
{
return CompareChain<T>( f1, f2 );
}
template<typename T>
CompareChain<T> MakeCompareChain( const typename CompareChain<T>::CompareFunctor& f1,
const typename CompareChain<T>::CompareFunctor& f2,
const typename CompareChain<T>::CompareFunctor& f3 )
{
return CompareChain<T>( f1, f2, f3 );
}
template<typename T>
CompareChain<T> MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ) )
{
return CompareChain<T>( boost::bind( f1, _1, _2 ) );
}
template<typename T>
CompareChain<T> MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ),
ComparisonResult ( *f2 )( const T&, const T& ) )
{
return CompareChain<T>( boost::bind( f1, _1, _2 ), boost::bind( f2, _1, _2 ) );
}
template<typename T>
CompareChain<T> MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ),
ComparisonResult ( *f2 )( const T&, const T& ),
ComparisonResult ( *f3 )( const T&, const T& ) )
{
return CompareChain<T>( boost::bind( f1, _1, _2 ), boost::bind( f2, _1, _2 ), boost::bind( f3, _1, _2 ) );
}