C ++从派生类转换为具有不同模板号的基类

时间:2016-02-13 08:13:55

标签: c++ templates inheritance

我正在尝试使用指针将Derived类分配给Base类,问题是这两个类具有不同数量的模板:

Base
pcl::Feature< PointInT, PointOutT >
Derived
pcl::FeatureFromNormals< PointInT, PointNT, PointOutT >

inheritance diagram可以看出,这两个班是父亲和孩子。

但是当我尝试将Derived类分配给Base类的指针时,我只获得了这个错误:

error: cannot convert ‘pcl::FeatureFromNormals<pcl::PointXYZRGBA, pcl::Normal, pcl::FPFHSignature33>*’ to ‘pcl::Feature<pcl::PointXYZRGBA, pcl::Normal>*’ in initialization

是否可以将Derived类分配给具有不同数量的模板的Base类?

1 个答案:

答案 0 :(得分:3)

该问题与模板参数的不同数量(和顺序)无关,您只是使用了错误的基类类型。

正如文件所述,

pcl::FeatureFromNormals< PointInT, PointNT, PointOutT >

公众派生自

pcl::Feature< PointInT, PointOutT > 

对于你的情况,

pcl::FeatureFromNormals<pcl::PointXYZRGBA, pcl::Normal, pcl::FPFHSignature33>

的基类应该是

pcl::Feature<pcl::PointXYZRGBA, pcl::FPFHSignature33>

不是

pcl::Feature<pcl::PointXYZRGBA, pcl::Normal>