我有一个函子类,具有内部状态,固定的输出类型和构造对象所需的固定参数:
class Functor
{
public:
/* constructor */
Functor(double var1, double var2 ...)
{
/* some initialization of internal variables */
}
array<double,N> operator()(double par1, ...)
{
array<double,N> output;
/* some calculations using private member functions */
return output;
}
private:
/* internal variables */
double internal_var1;
...
/* internal functions */
double internal func1(double var1, ...)
{
/* calculation */
}
...
};
此函子是使用来自用户的输入参数在主程序中实例化的。
我想在其他类的成员函数(也都是仿函数)中使用此仿函数进行进一步的计算。该问题的一个重要方面是,这些函子使用我无法更改的特定签名,否则我将向这些函子提供初始函子(即类Functor
中的一个)的结果作为输入参数。打电话给他们时。
到目前为止,我的想法(很快被证明是无稽之谈)是让这些类具有一个成员,该成员是指向上述仿函数的类的指针,并为这些类的构造函数提供对该仿函数的引用:>
class C1
{
public:
/* constructor */
C1(/* some parameters */, Functor* functor) // this is probably nonsense
{
/* C1 member initialization */
...
functor_ptr = functor;
}
void operator()(/* !!! fixed parameter signature here !!! */)
{
/* calulations using internal functions... */
}
private:
/* member variables and the functor class pointer*/
double internal_var1;
... etc. ...
Functor* functor_ptr;
/* member functions */
double internal_func1(double par1, ...)
{
/* use the functor */
double<array,N> tmp = (*functor_ptr)(par1, par2, ...) // more nonsense
/* more calculations */
return result;
}
double internal_func2(...)
... etc. ...
};
从到目前为止的情况看,似乎在std:function
中使用C1
调用可以实现我正在尝试执行的操作(并且我可以使用c ++ 11)。 This post似乎与我想要的非常相似,但是,由于C(ung)-fu仍然很弱,我不知道如何将函子附加到std::function
调用中。我也不知道是否有可能像std:function<array<double,N>(double,double,...> call_functor
这样的东西作为class的成员,而class是在构造函数中初始化的。
可以(如果可以的话)使用std::function
完成此操作,还是有更好的方法?
答案 0 :(得分:0)
实际上,返回带有std:function<array<double,N>(double,double,...)>
的函数,并使用lambda创建它:
std:function<array<double,N>(double,double,...)>([this](double x, double y, ...){return this->function(x, y,);};
您当然需要捕获this
才能知道应在哪个对象上调用该方法。