Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转发声明模板';s成员类型定义_C++_C++11 - Fatal编程技术网

C++ 转发声明模板';s成员类型定义

C++ 转发声明模板';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_导出点云

我使用了一个库(我无法修改),它声明了一个点云模板,其中包含一个Ptrtypedef

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

有什么想法吗

------编辑----


我需要这个转发声明的原因是我需要将一个函数声明到我自己的头中。我希望这个函数将点云::Ptr作为参数,因为我要输入到函数中的点云::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相同。