関数ポインタと関数オブジェクト(ファンクタ)のどちらでも保有できるクラス
すなおにこんなんでイケた。すぐ忘れるわぁ。
Hogeにhoge関数でも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