#include<iostream>
#include<functional>
template<typename T>
T use_f(T v, std::function<T(T)> f)
{
static int count = 0;
count += 1;
std::cout << " use_f count = " << count
<< ", &count="<< &count << std::endl;
return f(v);
}
double dub(double x) { return 2.0 * x; }
class Fq
{
private:
double z_;
public:
Fq(double z = 1.0) :z_(z) {}
double operator()(double q) { return z_ + q; }
};
int main()
{
double y = 1.21;
std::cout << " " << use_f<double>(y, dub);
std::cout << " " << use_f<double>(y, Fq(10.0));
return 0;
}
可以看到地址是一样的,不同的函数没有另外创建对象