【发布时间】:2018-02-19 17:08:17
【问题描述】:
我使用了一个库(我无法修改)并声明了一个包含 Ptr typedef
的 PointCloud 模板namespace pcl
{
template <typename PointT>
class PCL_EXPORTS PointCloud
{
...
typedef boost::shared_ptr<PointCloud<PointT> > Ptr;
}
}
现在,我需要转发声明 Ptr,但我不知道该怎么做。我已经完成了
namespace pcl
{
class PointXYZ;
template<class pointT> class PointCloud;
}
但我被困在这里,无论我做什么,我似乎都无法转发声明 Ptr typedef。
有什么想法吗?
---------编辑---------
我需要这个前向声明的原因是我需要将一个函数声明到我自己的头文件中。我希望这个函数将 PointCloud::Ptr 作为参数,因为我想要输入函数的 PointCloud 存储在 点云
【问题讨论】:
-
你不能这样做。
-
您要解决的实际问题是什么?用你自己的库类及其成员的声明来破解几乎总是不是正确的答案。
-
然后在你的函数中使用
boost::shared_ptr<PointCloud<PointXYZ> >?或者您可以将函数设为模板,并将boost::shared_ptr<PointCloud<T> >用于任何类型的T。 -
通常的做法是把你的 header 指向
#include的 header 有PointCloud的定义,然后只声明函数接受PointCloud<PointXYZ>::Ptr。 -
您可以只转发声明类型,如果您愿意,可以创建您自己的 typedef
using LibFooPtr = boost::shared_ptr<LibFooType>;?您的类型 def 不需要与库类型 def 相同。