有没有办法从同一个 class 中的仿函数调用 class 方法?
Is there a way to call a class method from a functor inside the same class?
我对 C++ 有点陌生,所以我不确定如何处理这样的问题。我有一个带有几个私有方法的 class。在其中一个方法中,有一个仿函数,我想从中调用另一个 class 方法。
这是示例代码:
# 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();
...
}
};
...
}
}
当我想制作这个文件时,出现错误:
cannot call member function ‘void new_space::myNewClass::f2()’
without object
有办法解决这个问题吗?
您需要让仿函数访问创建它的对象的 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)
};
我对 C++ 有点陌生,所以我不确定如何处理这样的问题。我有一个带有几个私有方法的 class。在其中一个方法中,有一个仿函数,我想从中调用另一个 class 方法。 这是示例代码:
# 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();
...
}
};
...
}
}
当我想制作这个文件时,出现错误:
cannot call member function ‘void new_space::myNewClass::f2()’ without object
有办法解决这个问题吗?
您需要让仿函数访问创建它的对象的 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)
};