c++ - 如何获得指向 Eigen operator() 的函数指针

标签 c++ operator-overloading function-pointers pointer-to-member eigen

我想要一个指向特征矩阵的operator()函数的函数指针。特别是,operator() Eigen 的 VectorXi 矩阵类,它采用单个索引。 IE。我打电话时使用的接线员:

VectorXi V(1);
...
VectorXi::Index i = 0;
VectorXi::Scalar& vi = V(i); // <-- this one

我尝试过的是:

VectorXi::Scalar& (*value_at_i)(VectorXi::Index i ) = &VectorXi::operator();

但这给了我很长的错误:

...: error: no matches converting function ‘operator()’ to type ‘int& (*)(Eigen::DenseIndex)’
/usr/local/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:124: error: candidates are: typename Eigen::internal::conditional<(bool)((Eigen::internal::traits<T>::Flags & Eigen::LvalueBit)), const typename Eigen::internal::traits<T>::Scalar&, typename Eigen::internal::conditional<Eigen::internal::is_arithmetic<typename Eigen::internal::traits<T>::Scalar>::value, typename Eigen::internal::traits<T>::Scalar, const typename Eigen::internal::traits<T>::Scalar>::type>::type Eigen::DenseCoeffsBase<Derived, 0>::operator()(typename Eigen::internal::traits<T>::Index, typename Eigen::internal::traits<T>::Index) const [with Derived = Eigen::Matrix<int, -0x00000000000000001, 1, 0, -0x00000000000000001, 1>]
/usr/local/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:184: error:                 typename Eigen::internal::conditional<(bool)((Eigen::internal::traits<T>::Flags & Eigen::LvalueBit)), const typename Eigen::internal::traits<T>::Scalar&, typename Eigen::internal::conditional<Eigen::internal::is_arithmetic<typename Eigen::internal::traits<T>::Scalar>::value, typename Eigen::internal::traits<T>::Scalar, const typename Eigen::internal::traits<T>::Scalar>::type>::type Eigen::DenseCoeffsBase<Derived, 0>::operator()(typename Eigen::internal::traits<T>::Index) const [with Derived = Eigen::Matrix<int, -0x00000000000000001, 1, 0, -0x00000000000000001, 1>]
/usr/local/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:405: error:                 typename Eigen::internal::traits<T>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(typename Eigen::internal::traits<T>::Index) [with Derived = Eigen::Matrix<int, -0x00000000000000001, 1, 0, -0x00000000000000001, 1>]
/usr/local/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:347: error:                 typename Eigen::internal::traits<T>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(typename Eigen::internal::traits<T>::Index, typename Eigen::internal::traits<T>::Index) [with Derived = Eigen::Matrix<int, -0x00000000000000001, 1, 0, -0x00000000000000001, 1>]

获取指向该运算符的函数指针的正确方法是什么?

最佳答案

您不能创建指向成员函数的函数指针。 C++ 支持指向成员函数的指针,但这可能不是您想要的。约定是传递仿函数而不是函数。仿函数是一个实现了运算符 () 的类。这正是您在类中所拥有的,因此只需将原始类作为仿函数传递即可。

编辑:下面是 C++ 中类 T 的 () 运算符上指向成员函数的指针的示例。

void (T::*op)(int) = &T::operator();
T t;
(t.*op)(5);

关于c++ - 如何获得指向 Eigen operator() 的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208315/

相关文章:

c++ - 使用函数指针调用函数模板

c++ - 使用一个运算符的重载来重载另一个运算符是一种好习惯吗?

c++ - C++ 中函数指针的问题

c++ - 为什么我在链接到库时出错,但在构建库时却没有?

c++ - 我能保证 Sleep() 不会休眠超过 10 毫秒吗?

c++ - 表达式中运算符的 GCC 和 ADL

C++ operator+ 的简单重载不编译

c++ - 重新分配虚函数是否合法

c++ - fstream 文件为空(简单的小代码)

c++ - rcpp 编译错误