//I am initialised with my default constructor (no args)
SampleClass<String> compare;
//I am initialised with my `const char*` constructor (and assignment operator)
String lhs = "abc";
String rhs = "efg";
//Compare (already initialised) is being invoked by it's `operator()`
check_equality(compare(lhs, rhs), true);
сравнение уже построено. В нем реализовано operator()
, что позволяет ему отображаться как функция, принимающая аргументы.
Вы можете легко сделать свой собственный.
struct op_test{
int i;
op_test(int i_) : i(i_){}
int operator()(int j)const { return j*i; }
};
:::
op_test ot(5);
ot(6); //5*6
Причина, по которой это полезно, в том, что мы можем делать что-то подобное.
std::vector<int> a(700); //700 ints
std::transform(a.begin(), a.end(), b.begin(), op_test(5));
//or
std::transform(a.begin(), a.end(), b.begin(), &my_func); //calls a function
std::transform(a.begin(), a.end(), b.begin(), [](int i){ return i*5; }); //lambda
см. Здесь:
http://msdn.microsoft.com/en-us/library/5tk49fh2(v=vs.80).aspx
полезно с
http://en.cppreference.com/w/cpp/algorithm