以下のように動作するFuncWrapperクラスを実装したいのですが、思ったほど簡単ではありません。
int OrdinaryFunction(int n)
{
return n;
}
struct Functor
{
int operator ()(int n)
{
return n;
}
};
int main()
{
FuncWrapper<int(int)> f1(OrdinaryFunction);
cout << f1(1); // output 1;
Functor functor;
FuncWrapper<int(int)> f2(functor);
cout << f2(2); // output 2;
return 0;
}
私の質問は次のとおりです。コードをコンパイルするために、クラスFuncWrapperをPURE C ++(つまり、STLなし)で実装するにはどうすればよいですか?
以下に示すFuncWrapperを部分的に実装しました。
template<class T>
class FuncWrapper;
template<class ReturnType, class Parameter1>
class FuncWrapper<ReturnType(Parameter1)>
{
public:
typedef ReturnType (*FunctionPtr)(Parameter1);
template<class Functor>
FuncWrapper(Functor fn)
{
// ???
}
FuncWrapper(FunctionPtr fn)
: fn(fn)
{}
ReturnType operator ()(Parameter1 p1)
{
return this->fn(p1);
}
private:
FunctionPtr fn;
};