我想实现一个类 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;
}
我的问题是:如何在 PURE C++(即没有 STL)中实现类 FuncWrapper 来编译代码?
我部分实施了 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;
};