在另一个 class 的成员函数中使用仿函数

Using a functor inside member functions of another class

我有一个仿函数 class 具有内部状态和固定输出类型以及构造对象所需的固定参数:

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 */

    }
    ...
};

这个仿函数是在主程序中使用用户的输入参数实例化的。 我想在其他 classes 的成员函数中使用这个仿函数,它们也是仿函数,以进行进一步的计算。这个问题的一个重要方面是,这些仿函数使用我无法更改的特定签名,否则我只会向这些仿函数提供初始仿函数的结果(即 class Functor ) 作为调用它们时的输入参数。

到目前为止我的想法(很快就证明是无稽之谈)是让这些 classes 有一个成员,它是指向上述仿函数的 class 的指针,并提供构造函数其中 class 是对仿函数的引用:

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. ...
};

从我目前所看到的来看,似乎在 C1 中使用 std:function 调用可以实现我正在尝试做的事情(并且我可以使用 c++11)。 This post 看起来与我想要的非常相似,但是,我无法弄清楚如何将我的仿函数附加到 std::function 调用,因为我的 C(ung)-fu 仍然很弱。我也不知道是否有可能像 std:function<array<double,N>(double,double,...> call_functor 这样的东西作为 class 的成员,这是在构造函数中初始化的。

可以,如果可以,如何使用 std::function 或有更好的方法吗?

的确,return 一个带有 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 当然要知道应该在哪个对象上调用该方法。