c++ - Eigen 分配器在模板类中造成问题

标签 c++ std eigen templating

我有这门课:

typedef vector<Eigen::Affine3d,Eigen::aligned_allocator<Eigen::Affine3d> > VoteList;

template <class T>
class KernelDensityEstimator {

  public:
    KernelDensityEstimator() {}

    void setData(vector<T>& d) {
      data = d;
    }

    void setKernel(double (*k)(T&, T&)) {
      kernel = k;
    }

    double evaluate(T& p) {
      double sum;
      for (int i = 0; i < data.size(); i++) {
        sum += (*kernel)(p, data[i]);
      }
      return sum/data.size();
    }

  private:
    double (*kernel) (T&, T&);
    vector<T> data;

};

我现在想与类型 T = Eigen::Affine3d 一起使用。然而,当我调用 setData()这给我带来了麻烦,因为 Eigen 需要为标准容器指定一个 Eigen::aligend_allocator 以与 Eigen 一起使用。

所以当我给出 vector<Eigen::Affine3d,Eigen::aligned_allocator<Eigen::Affine3d> > (又名 VoteList )作为 setData() 的输入参数我的编译器提示说:

no known conversion for argument 1 from ‘VoteList {aka std::vector<Eigen::Transform<double, 3, 2>, Eigen::aligned_allocator<Eigen::Transform<double, 3, 2> > >}’ to ‘std::vector<Eigen::Transform<double, 3, 2>, std::allocator<Eigen::Transform<double, 3, 2> > >&’

这有点道理,但我认为分配器是对象类型的一部分。有没有办法解决这个问题并保留我的 KernelDensityEstimator通用?

最佳答案

您可以为您计划使用的类型启用 Eigen 的 std::vector 特化,详见 there ,例如:

#include<Eigen/StdVector>
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Affine3d)
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Eigen::Matrix4d)
...

关于c++ - Eigen 分配器在模板类中造成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256027/

相关文章:

c++ - 我应该使用引用成员来处理对象之间的依赖关系吗?

c++ - 如何覆盖 printf 输出的先前字符串

algorithm - 特征 - 旋转矩阵的重新正交化

c++ - std::chrono::duration_cast - GCC 实现有问题吗?

Eigen3 张量切片,无需复制数据

c++ - 在ARM Zynq(裸机)上使用Eigen C++库

c++ - 如何在 QT 语言翻译中使用 & 符号字符串

c++ - 这是删除基类指针的内存泄漏吗,如何改正

c++ - Windows Phone 8 上的性病

c++:交换 map 的 map