- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!