我重構了一些代碼,發現有兩個地方可以使用相同的代碼編寫,除了一個地方的比較器是less<double>
而另一個地方是greater<double>
。喜歡的東西:std :: set在運行時選擇比較小或更大的比較器
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);
//....
}
但我想使用內置的。問題是我不知道如何聲明比較器併爲它分配內置的謂詞。
任何幫助將不勝感激。
謝謝!我真的不需要運行時檢查,所以我可以在調用者中選擇比較器。 – MikMik