#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);
}
