gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:27 26 4
gpt4 key购买 nike

我想要一个指向特征矩阵的 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++ 支持指向成员函数的指针,但它可能不是您想要的。约定是传递仿函数而不是函数。仿函数是实现了运算符 () 的类。这正是您类(class)中的内容,因此只需将原始类(class)作为仿函数传递即可。

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com