Есть ли способ вызвать метод класса из функтора внутри того же класса? - PullRequest
0 голосов
/ 27 августа 2018

Я немного новичок в C ++, поэтому я не уверен, как справиться с такой проблемой. У меня есть класс с несколькими закрытыми методами. Внутри одного из методов есть функтор, из которого я хочу вызвать другой метод класса. Вот пример кода:

# myprogram.h
namespace new_space
{
    // Generic functor
    template<typename _Scalar, int NX = Eigen::Dynamic, int NY = Eigen::Dynamic>
    struct Functor
    {
        typedef _Scalar Scalar;
        enum {
            InputsAtCompileTime = NX,
            ValuesAtCompileTime = NY
        };
        ...
    };

    class myNewClass
    {
    private:
        void f1();
        void f2();
    };
}

# myprogram.cpp
namespace new_space
{
    void myNewClass::f1()
    {
        ...
     }

    void myNewClass::f2()
    {
        struct my_functor : Functor<double>
        {
            my_functor(void): Functor<double>(3,3) {}
            int operator()(const Eigen::VectorXd &x, Eigen::VectorXd &fvec) const
            {
                f1();
                ...
            }
        };
        ...
    }
}

Когда я хочу создать этот файл, я получаю сообщение об ошибке:

не может вызвать функцию-член void new_space :: myNewClass :: f2 () ’ без объекта

Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 27 августа 2018

Вам необходимо предоставить функтору доступ к указателю this объекта, его создающего. Как то так:

void myNewClass::f2()
{
    struct my_functor : Functor<double>
    {
        myNewClass *self;
        my_functor(myNewClass& self): Functor<double>(3,3), self(&self) {}
        int operator()(const Eigen::VectorXd &x, Eigen::VectorXd &fvec) const
        {
            self->f2();
            ...
        }
    };

    // when creating the functor, do it like this:
    // my_functor(*this)
};
...