मैं कुछ कोड दोबारा कर रहा था और पाया कि एक ही कोड के साथ एक ही कोड के साथ लिखा जा सकता है, एक सेट के तुलनित्र को छोड़कर less<double>
और दूसरे स्थान पर है। कुछ की तरह:std :: set रनटाइम पर कम या अधिक तुलनित्र का चयन करें
double MyClass::GeneralFunction(double val, bool condition)
{
if(condition)
{
// Select greater as comparator
}
else
{
// Select less as comparator
}
set<double, comparator> s;
// common code
}
मैं, यह मेरी कस्टम तुलनित्र कार्यों का उपयोग करके काम कर दिया है इस तरह::
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
}
तो मैं क्या कर के बारे में सोचा
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);
//....
}
लेकिन मैं चाहते हैं अंतर्निहित लोगों का उपयोग करने के लिए। समस्या यह है कि मुझे नहीं पता कि तुलनित्र को कैसे घोषित किया जाए और इसे भविष्य में निर्मित किया जाए।
किसी भी मदद की सराहना की जाएगी।
धन्यवाद! मुझे वास्तव में रनटाइम चेक की आवश्यकता नहीं थी, इसलिए मैं कॉलर में तुलनित्र का चयन कर सकता था। 'Std :: function' के उपयोग के लिए – MikMik