Tôi đã tái cấu trúc một số mã và thấy có hai vị trí có thể được viết bằng cùng mã ngoại trừ bộ so sánh của một tập là less<double>
ở một nơi và greater<double>
. Một cái gì đó như:std :: set chọn ít hoặc lớn hơn so sánh tại thời gian chạy
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
}
Vì vậy, tôi nghĩ đến việc thực hiện:
double MyClass::GeneralFunction(double val, bool condition)
{
if(condition)
{
// Select greater as comparator
}
else
{
// Select less as comparator
}
set<double, comparator> s;
// common code
}
Tôi đã thực hiện nó hoạt động bằng cách sử dụng chức năng so sánh tùy chỉnh của tôi, như thế này:
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);
//....
}
Nhưng tôi muốn để sử dụng các ứng dụng tích hợp sẵn. Vấn đề là tôi không biết làm thế nào để khai báo bộ so sánh và gán cho nó các biến vị ngữ được dựng sẵn.
Mọi trợ giúp sẽ được đánh giá cao.
Cảm ơn! Tôi không thực sự cần kiểm tra thời gian chạy, vì vậy tôi có thể chọn bộ so sánh trong người gọi. – MikMik