関数ポインタと関数オブジェクト(ファンクタ)のどちらでも保有できるクラス

すなおにこんなんでイケた。すぐ忘れるわぁ。

Hogehoge関数でもMogeクラスのオブジェクトでもどっちでも入ると。

#include <iostream>
template<class T_>
struct Hoge
{
	Hoge(const T_ & x) : x_(x){}
	double operator()(double x){return x_(x); }
	T_ x_;
};
double hoge(double x){ return x + 10; }
struct Moge
{
	double operator()(double x){ return x + 3; }
};
int main()
{
	Hoge<double(*)(double)> x1{ hoge };
	Hoge<Moge> x2 { Moge()};
	std::cout << x1(10) << std::endl;
	std::cout << x2(10) << std::endl;
	return 0;
}

実行結果

20
13