我正在重构一些代码,发现有两个地方可以用相同的代码编写,除了一个集合的比较器less<double>在一个地方和另一个地方greater<double>。就像是:
double MyClass::Function1(double val)
{
    std::set<double, less<double> > s;
    // Do something with s
}
double MyClass::Function2(double val)
{
    std::set<double, greater<double> > s;
    // Do the same thing with s as in Function1
}
所以我想这样做:
double MyClass::GeneralFunction(double val, bool condition)
{  
    if(condition)  
    {  
        // Select greater as comparator  
    }  
    else
    {  
        // Select less as comparator  
    }  
    set<double, comparator> s;  
    // common code
}
我通过使用我的自定义比较器函数使其工作,如下所示:
bool my_greater(double lhs, double rhs)
{
    return lhs > rhs;
}
bool my_less(double lhs, double rhs)
{
    return lhs < rhs;
}
double MyClass::GeneralFunction(double val, bool condition)
{ 
    typedef bool(*Comparator) ( double,  double);
    Comparator comp = &my_less;
    if (condition)
    {
        comp = &my_greater;
    }
    std::set<double, Comparator > s(comp);  
    //....
}
但我想使用内置的。问题是我不知道如何声明比较器并将其分配给内置谓词。
任何帮助将不胜感激。