C++ 转发声明模板';s成员类型定义
我使用了一个库(我无法修改),它声明了一个点云模板,其中包含一个PtrtypedefC++ 转发声明模板';s成员类型定义,c++,c++11,C++,C++11,我使用了一个库(我无法修改),它声明了一个点云模板,其中包含一个Ptrtypedef namespace pcl { template <typename PointT> class PCL_EXPORTS PointCloud { ... typedef boost::shared_ptr<PointCloud<PointT> > Ptr; } } 名称空间pcl { 模板 类PCL_导出点云
namespace pcl
{
template <typename PointT>
class PCL_EXPORTS PointCloud
{
...
typedef boost::shared_ptr<PointCloud<PointT> > Ptr;
}
}
名称空间pcl
{
模板
类PCL_导出点云
{
...
typedef boost::shared_ptr ptr;
}
}
现在,我需要转发声明Ptr,我不知道如何转发。我已经做了
namespace pcl
{
class PointXYZ;
template<class pointT> class PointCloud;
}
名称空间pcl
{
类点xyz;
模板类点云;
}
但是我被困在这里,无论我做什么,我似乎都无法向前声明Ptrtypedef
有什么想法吗
------编辑----
我需要这个转发声明的原因是我需要将一个函数声明到我自己的头中。我希望这个函数将点云
namespace pcl
{
class PointXYZ;
template<class pointT> class PointCloud;
}
template<class T>
using foo = boost::shared_ptr<pcl::PointCloud<T>>;
名称空间pcl
{
类点xyz;
模板类点云;
}
模板
使用foo=boost::shared\u ptr;
foo
与pcl::PointCloud::Ptr
typedef是类型的别名。如果这有道理的话,它们本身不是类型
namespace pcl
{
class PointXYZ;
template<class pointT> class PointCloud;
}
template<class T>
using foo = boost::shared_ptr<pcl::PointCloud<T>>;
名称空间pcl
{
类点xyz;
模板类点云;
}
模板
使用foo=boost::shared\u ptr;
foo
的类型与pcl::PointCloud::Ptr
的类型相同。您不能这样做。您试图解决的实际问题是什么?用自己对库的类及其成员的声明进行攻击几乎总是不正确的答案。那么在函数中使用boost::shared\u ptr
?或者,您可以将该函数设置为模板,并将其用于任何类型的T
。通常的方法是将#包含具有点云定义的头,然后只需声明函数以获取PointCloud::Ptr
。您只需向前声明类型,如果需要,使用LibFooPtr=boost::shared\u Ptr创建您自己的typedef代码>?您的类型def不需要与库类型def相同。您不能这样做。您试图解决的实际问题是什么?用自己对库的类及其成员的声明进行攻击几乎总是不正确的答案。那么在函数中使用boost::shared\u ptr
?或者,您可以将该函数设置为模板,并将其用于任何类型的T
。通常的方法是将#包含具有点云定义的头,然后只需声明函数以获取PointCloud::Ptr
。您只需向前声明类型,如果需要,使用LibFooPtr=boost::shared\u Ptr创建您自己的typedef代码>?您的类型def不需要与库类型def相同。