如何使用抽象类型的C++指针指向具体的class?
How to use a C++ pointer of abstract type to point to a concrete class?
我正在使用 Point Cloud Library 并试图避免重复以下行为:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
subclass.setInputCloud(input_cloud);
subclass.filter(*cloud_filtered);
return cloud_filtered;
}
我希望使用基于此 example 并遵循以下内容的内容:
pcl::Filter<PointXYZRGB>* f;
pcl::Subclass<PointXYZRGB> s; //where s is an implementation of f
f = &s;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
f->setInputCloud(input_cloud);
f->filter(*cloud_filtered);
return cloud_filtered;
}
然而,这不会像编译器报告的那样编译为 f does not name a type
。
我猜这是因为 pcl::Filter 是抽象的 class?
此方法是否适用于 class 示例,例如 pcl::VoxelGrid 还是有替代方法?
非常感谢任何帮助!
行 f = &s;
应移至函数内。
在这种情况下,它被移动到派生子类的构造函数中。
感谢用户 aschepler 的回答
我正在使用 Point Cloud Library 并试图避免重复以下行为:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
subclass.setInputCloud(input_cloud);
subclass.filter(*cloud_filtered);
return cloud_filtered;
}
我希望使用基于此 example 并遵循以下内容的内容:
pcl::Filter<PointXYZRGB>* f;
pcl::Subclass<PointXYZRGB> s; //where s is an implementation of f
f = &s;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
f->setInputCloud(input_cloud);
f->filter(*cloud_filtered);
return cloud_filtered;
}
然而,这不会像编译器报告的那样编译为 f does not name a type
。
我猜这是因为 pcl::Filter 是抽象的 class?
此方法是否适用于 class 示例,例如 pcl::VoxelGrid 还是有替代方法?
非常感谢任何帮助!
行 f = &s;
应移至函数内。
在这种情况下,它被移动到派生子类的构造函数中。
感谢用户 aschepler 的回答