跳转至

40_中高级精读

第42章:中高级精读——高性能与泛型设计(第43周)

教学目标:精读两个以C++泛型编程技术著称的项目——small_gicp(Traits+Policy-based Design)和Faster-LIO(模板特化+TBB),理解"如何用C++类型系统让同一套算法适应不同数据结构和执行策略"。

精读项目

  • small_gicp(⭐900,C++17)——SLAM领域Traits Pattern和Policy-based Design的教科书。精读文件:traits.hpp(定义traits::point(cloud, i)泛型点访问——同一套配准算法同时支持pcl::PointCloud/std::vector<Eigen::Vector3d>/Open3D PointCloud/任何自定义类型,只需为新类型特化traits::point()即可)、registration.hpp(三维策略组合Registration<Factor, Reduction, Rejector>——Factor控制配准代价函数(ICP/GICP/VGICP),Reduction控制并行策略(Serial/OpenMP/TBB),Rejector控制外点剔除策略——用户可以自由组合这三个维度)。C++学习重点:header-only库设计(零编译依赖——只需#include即可使用)、traits特化替代虚函数继承(零运行时开销的多态)、C++17 if constexpr编译期分支选择。

  • Faster-LIO(⭐1.5k,C++17)——iVox模板特化+TBB并行的极致性能案例。精读文件:iVox.hpp(增量体素哈希——template<int dim, IVoxNodeType node_type>node_type是编译期参数,选择LINEAR或PHC(伪希尔伯特曲线)两种搜索策略。if constexpr (node_type == IVoxNodeType::PHC)在编译期完全消除未选择分支的代码——零分支预测失败开销)。TBB并行哈希插入——tbb::parallel_for并行化KNN搜索和体素更新。性能数据:在Velodyne 64线LiDAR上达**1800+ FPS**(比FAST-LIO2快约3倍)。C++学习重点:非类型模板参数IVoxNodeType替代运行时if-else、tbb::concurrent_hash_map替代std::unordered_map+std::mutex