gpt4 book ai didi

c++ - 如何子类化和重新实现包含在命名空间中的类?

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:42 24 4
gpt4 key购买 nike

我正在尝试使用 PCLVisualizer 来可视化点云。

https://github.com/PointCloudLibrary/pcl/blob/master/visualization/src/pcl_visualizer.cpp

我需要使用点拾取事件来获取我在可视化器中用鼠标左键单击点云时选择的点的 z,y,z 坐标:

https://github.com/PointCloudLibrary/pcl/blob/master/visualization/src/point_picking_event.cpp

问题是 point_picking_event.cpp 代码需要按下 SHIFT 键。这是无键盘系统(运行 Qt),因此无法选择 SHIFT 键。

我的计划是继承类

pcl::visualization::PointPickingCallback

并更改检查 SHIFT 键的 pcl::visualization::PointPickingCallback::Execute 中的代码

if ((eventid == vtkCommand::LeftButtonPressEvent) && (iren->GetShiftKey () > 0))

 if (eventid == vtkCommand::LeftButtonPressEvent)

然后我会将继承的类放在它自己的命名空间 mynamespace 中,并将其命名为 inhPointPickingCallback

新功能

mynamespace::inhPointPickingCallback::Execute

现在不会检查 SHIFT 键,我们应该没问题。

问题:我无法全神贯注于如何继承和重新定义此类。 (我正在将我的 C++ 从初级水平提升到更高级水平)。

你能帮我写一个编译示例吗,它有一个头文件 (.h) 和继承 pcl::visualization::PointPickingCallback重新实现 函数的 .cpp 文件pcl::visualization::PointPickingCallback::Execute (...)

https://github.com/PointCloudLibrary/pcl/blob/master/visualization/src/point_picking_event.cpp https://github.com/PointCloudLibrary/pcl/blob/master/visualization/include/pcl/visualization/point_picking_event.h

在其自己的命名空间和类 mynamespace::inhPointPickingCallback::Execute (...) 中更改代码以不检查 SHIFT 键?

最佳答案

这个例子应该让你开始了解继承和命名空间。它的直截了当只是在你想要的命名空间中声明你的新类并从中派生。代码非常简单,将它拆分为 header 和 cpp 应该没有任何问题。

#include <iostream>

namespace pcl{
namespace visualization {
class PointPickingCallback{
public:
PointPickingCallback(){
std::cout << "Contruct PointPickingCallback" << std::endl;
}
virtual void Execute(){
std::cout << "With shift" << std::endl;
}
};
}
}

namespace mynamespace{
class InhPointPickingCallback : public pcl::visualization::PointPickingCallback {
public:
InhPointPickingCallback(){
std::cout << "Contruct Inherited PPC" << std::endl;
}
void Execute() override{ //note override is c++11
std::cout << "Without shift" << std::endl;
}
};
}

int main()
{
//without inheritance
//pcl::visualization::PointPickingCallback ppc;
mynamespace::InhPointPickingCallback ppc;
ppc.Execute();
return 0;
}

关于c++ - 如何子类化和重新实现包含在命名空间中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49208920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com