如何使用抽象类型的 C++ 指针指向具体类?
Posted
技术标签:
【中文标题】如何使用抽象类型的 C++ 指针指向具体类?【英文标题】:How to use a C++ pointer of abstract type to point to a concrete class? 【发布时间】:2017-04-18 17:49:04 【问题描述】:我正在使用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 是一个抽象类吗?
这种方法对pcl::VoxelGrid 等示例类有效还是有替代方法?
非常感谢任何帮助!
【问题讨论】:
我闻到了missingtypename
你想在函数之外做f = &s;
吗?
通常当编译器找不到类时会出现此错误,对我来说将 f 作为抽象类是很正常的,我认为问题出在包含或类似的东西上,是你确定你的包含在正确的地方吗?
是的!我没有意识到这在函数之外是非法的。我不是 C++ 学者,所以对此我深表歉意。我将f = &s;
放入构造函数中,它按预期工作。非常感谢大家。 @aschepler
【参考方案1】:
f = &s;
行应移至函数内。
在这种情况下,它被移到派生子类的构造函数中。
感谢用户 aschepler 的回答
【讨论】:
以上是关于如何使用抽象类型的 C++ 指针指向具体类?的主要内容,如果未能解决你的问题,请参考以下文章