KALDI编码风格

Kaldi编码风格

当开始编写Kaldi工具包的最终版本时,我们决定使用OpenFst作为C ++库。

为了与OpenFst保持一致,我们决定在大多数方面使用相同的编码风格。

从查看代码可以明显看出Kaldi编码风格的许多方面。要点包括:

  • 关于命令命名的规则,例如MyTypeName,MyFunction,my_class_member_var_,my_struct_member,KALDI_MY_DEFINE,kGlobalConstant,kEnumMember,g_my_global_variable,my_namespace,my-file.h,my-file.cc,my-implementation-inl.h
  • 管理函数参数的规则:没有非const引用; 输入先于输出。
  • 管理空格和格式的规则:每行最多80个字符(必要时除外),在函数同一行上打开括号; 查看其他空白约定的代码。
  • I / O:我们使用C ++样式的I / O,对象的I / O例程有特定的约定(参见Kaldi I / O机制)。
  • 函数参数:我们不允许引用参数为非const(使用指针),iostreams例外。输入必须在函数参数列表中的输出之前。
  • 错误状态主要由异常表示(请参阅Kaldi日志记录和特定机制的错误报告)。
  • 对于“普通”整数,我们尝试使用int32。这是因为当已知整数类型的二进制大小时,Kaldi的二进制I / O机制(Kaldi I / O机制)最容易使用。
  • 对于“普通”浮点值,我们使用BaseFloat这是一个typedef(如果使用KALDI_DOUBLEPRECISION = 1进行编译,则为double,否则为float)。这样可以更轻松地以双精度测试算法并检查差异。但是,我们总是使用double作为累加器。
  • 我们在所有#defines前加上KALDI_,以避免将来可能与其他代码库发生冲突(因为#defines不受命名空间保护)。所有kaldi代码都在命名空间kaldi中,除了名称空间为fst的OpenFst扩展。
  • 采用一个参数的类构造函数必须使用“显式”关键字(这可以防止不需要的类型转换)。
  • 我们通常避免使用复制构造函数和赋值运算符(有一个KALDI_DISALLOW_COPY_AND_ASSIGN可以禁用C ++提供的“默认”)。
  • 我们避免运算符重载,除非STL算法需要。
  • 我们通常避免函数重载,更喜欢不同的名称。
  • 我们使用C ++风格的强制转换,如static_cast <int>,而不是C风格的强制转换,如(int)
  • 我们尽可能使用const。

Google C ++样式指南的例外情况包括:

  • 我们使用iostreams,并允许对iostreams的非const引用传递给函数(这违反了no-non-const-references规则)。
  • 对于get / set方法,假设类成员名为x_,Google样式的get和set方法将是x()和set_x()。但是,遵循OpenFst编码样式,我们将它们称为X()和SetX():例如,Mean()和SetMean()。这个特殊的规则是新的; 在过去,我们有一个不一致的方法,我们将改变代码以符合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪snowflake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值