我有这门课:
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/