具有相同存储类型的向量之间的函数不匹配

时间:2018-11-10 11:14:43

标签: c++ vector allocator function-templates

我已经定义了一个名为"Create2DBBox"的模板函数,仅用于从点云矢量创建边界框,实现细节并不那么重要。

我想使用模板PointT类型来接受不同的Point类型,例如PointXYZ或`PointXYZI',问题是当我定义如下函数时: ```

template<typename PointT>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<std::vector<pcl::PointCloud<PointT>, Eigen::aligned_allocator<pcl::PointCloud<PointT> >>> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
{
  std::vector<BBox2D> bbox_vec_res;
  for(int i = 0; i < cloudVecIn->size(); ++i) {
    BBox2D bbox((*cloudVecIn)[i], projectMatrix, imageSize);
    bbox_vec_res.push_back(bbox);
  }
  return bbox_vec_res;
}

当我如下使用此功能时:

 std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
 vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));

我得到了错误:

error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
 D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));

我不知道,我想这一定是fisrt模板参数的原因。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

它们是不一样的,因为您的函数描述了使用自定义分配器指向向量的共享指针。

由于您的函数不依赖于分配器,请执行以下操作:

template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)

甚至,您也不需要共享指针,所以:

template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)