Standard
C++
命名规范
NOTE
Compound names of over three words are a clue that your design may be unnecessarily confusing.
命名空间规范
不建议在头文件使用
using-directive
:会干扰导入这个头文件的目标文件的命名空间可以在源文件中使用
using-directives
,但更推荐使用using-declarations
,只导入自己想要的变量
using namespace std; // Bad, because it imports all names from std::
using std::list; // I want to refer to std::list as list
using std::vector; // I want to refer to std::vector as vector
函数名
checkForErrors() // good
errorCheck() // bad
dumpDataToFile() // good
dataFile() // bad
宏
#if vs. #ifdef
使用前者,因为可以如此使用来屏蔽宏
CLI
cc -c lurker.cpp -DDEBUG=0
源程序
cudaEvent_t start_, stop_;
cudaStream_t stream_ = 0;
CHECK_CUDA_ERROR(cudaEventCreate(&start_));
CHECK_CUDA_ERROR(cudaEventCreate(&stop_));
CHECK_CUDA_ERROR(cudaEventDestroy(start_));
CHECK_CUDA_ERROR(cudaEventDestroy(stop_));
#if PERFORMANCE_LOG
float generateFeaturesTime = 0.0f;
CHECK_CUDA_ERROR(cudaEventRecord(start_, stream_));
#endif
#if PERFORMANCE_LOG
CHECK_CUDA_ERROR(cudaEventRecord(stop_, stream_));
CHECK_CUDA_ERROR(cudaEventSynchronize(stop_));
CHECK_CUDA_ERROR(cudaEventElapsedTime(&generateFeaturesTime, start_, stop_));
std::cout<<"TIME: generateVoxels: "<< generateVoxelsTime <<" ms." <<std::endl;
std::cout<<"TIME: generateFeatures: "<< generateFeaturesTime <<" ms." <<std::endl;
std::cout<<"TIME: doinfer: "<< doinferTime <<" ms." <<std::endl;
std::cout<<"TIME: doPostprocessCuda: "<< doPostprocessCudaTime <<" ms." <<std::endl;
#endif
拓展资料
Python
package_name
ClassName
method_name
field_name
_private_something
self.__really_private_field
_global
4 space indentation
ROS
Package
全部由小写字母、数字、_构成,开头为字母
不使用连续的
_
,即__
至少两个字符长
更多细节参考 REP-144
所有python源代码都放置在ros包目录下
要被调用的模块/包放置在/src目录下
python脚本名等于节点名
脚本顶部有
#!/usr/bin/env python
目录结构的参考案例
global_planner # ros package
|- src/ # 需要重用的代码
|- global_planner # python package
|- __init__.py
|- file.py
|- scripts/
|- ros相关的脚本文件(不被其他包调用)
|- launch/ # 存放launch文件
|- scripts/ # 含ros的相关不需要重用的代码
|- msg/ # 存放msg文件
|- srv/ # 存放srv文件
|- urdf/ # 存放urdf / xacro等模型文件
CMakesLists.txt
package.xml
setup.py
Topic
更多细节参考 wiki
所有topic应放置在
private namespace
;global topic
需要有文档说明私人命名空间的命名建议:方便别人在launch文档中进行重映射
input
: 该主题是要订阅的主题output
: 该主题是要发布的主题debug
: 该发布的主题是用来debug的 (e.g. for visulization)
举例:有一个节点订阅点云并对它进行下采样,那它的主题应设计为:
~input/points_original
~output/points_filtered