Несоответствие функций между векторами с одинаковыми сохраненными типами - PullRequest
0 голосов
/ 10 ноября 2018

Я определил шаблонную функцию с именем "Create2DBBox" только для создания ограничивающих рамок из вектора облака точек, детали реализации менее важны.

Я хочу использовать шаблон PointT тип для принятия различных типов точек, таких как 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));

Я не знаю, и я думаю, что это должно быть первой причиной аргумента шаблона. Спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 ноября 2018

Они не совпадают, так как ваша функция сообщает общий указатель на вектор с помощью специального распределителя.

Поскольку ваша функция не зависит от распределителя, выполните:

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)
...