#include <iostream>
using namespace std;
template <typename T>
class SomeClass {
public:
typedef bool (*compareFunction)(T, T);
SomeClass(compareFunction c) : pCompare(c), val(0.0) {}
bool compare(T v)
{
return (*pCompare)(val, v);
}
private:
double val;
compareFunction pCompare;
};
bool compare1(double a, double b)
{
cout << "compare1" << endl;
return a == b;
}
bool compare2(double a, double b)
{
cout << "compare2" << endl;
return a == b;
}
int main()
{
SomeClass<double> obj1(&compare1);
obj1.compare(5.55);
SomeClass<double> obj2(&compare2);
obj2.compare(5.55);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFNvbWVDbGFzcyB7CnB1YmxpYzoKCgl0eXBlZGVmIGJvb2wgKCpjb21wYXJlRnVuY3Rpb24pKFQsIFQpOwoKCVNvbWVDbGFzcyhjb21wYXJlRnVuY3Rpb24gYykgOiBwQ29tcGFyZShjKSwgdmFsKDAuMCkge30KCglib29sIGNvbXBhcmUoVCB2KQoJewoJCXJldHVybiAoKnBDb21wYXJlKSh2YWwsIHYpOwoJfQoKcHJpdmF0ZToKCglkb3VibGUgdmFsOwoJY29tcGFyZUZ1bmN0aW9uIHBDb21wYXJlOwp9OwoKYm9vbCBjb21wYXJlMShkb3VibGUgYSwgZG91YmxlIGIpCnsKCWNvdXQgPDwgImNvbXBhcmUxIiA8PCBlbmRsOwoJcmV0dXJuIGEgPT0gYjsKfQoKYm9vbCBjb21wYXJlMihkb3VibGUgYSwgZG91YmxlIGIpCnsKCWNvdXQgPDwgImNvbXBhcmUyIiA8PCBlbmRsOwoJcmV0dXJuIGEgPT0gYjsKfQoKaW50IG1haW4oKQp7CglTb21lQ2xhc3M8ZG91YmxlPiBvYmoxKCZjb21wYXJlMSk7CglvYmoxLmNvbXBhcmUoNS41NSk7CglTb21lQ2xhc3M8ZG91YmxlPiBvYmoyKCZjb21wYXJlMik7CglvYmoyLmNvbXBhcmUoNS41NSk7Cn0K