zoukankan      html  css  js  c++  java
  • OfficialKaldi(八)——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
    • 控制函数参数的规则:无非常量引用;输入先于输出。
    • 空格和格式的规则:每行最多80个字符(必要时除外),在与功能相同的行上带有大括号;请参阅其他空格约定的代码。
    • I / O:我们使用C ++风格的I / O,并在对象的I / O例程上有特定的约定(请参阅
    • Kaldi I / O机制
    • )。
    • 函数参数:我们不允许引用参数为非常量(使用指针),iostream除外。输入必须在功能参数列表中的输出之前。
    • 错误状态通常由异常指示(有关特定机制,请参见
    • Kaldi日志记录和错误报告
    • )。
    • 对于“普通”整数,我们尝试使用int32。这是因为在知道整数类型的二进制大小时,最容易使用Kaldi的二进制I / O机制(
    • Kaldi I / O机制
    • )。
    • 对于“常规”浮点值,我们使用BaseFloat,它是一个typedef(如果您使用KALDI_DOUBLEPRECISION = 1进行编译,则它是double,否则是float)。这样可以更轻松地以双精度测试算法并检查差异。但是,我们始终对累加器使用double。
    • 我们在所有#define前面加上KALDI_,以避免将来与其他代码库发生冲突(因为#define不受名称空间保护)。除了在名称空间fst中的OpenFst扩展之外,所有的kaldi代码都在名称空间kaldi中。
    • 带有一个参数的类构造函数必须使用“ explicit”关键字(这可以防止不必要的类型转换)。
    • 我们通常避免使用复制构造函数和赋值运算符(有一个KALDI_DISALLOW_COPY_AND_ASSIGN会禁用C ++提供的“默认”值)。
    • 除非STL算法要求,否则我们将避免运算符重载。
    • 我们通常避免函数重载,而是使用不同的名称。
    • 我们使用static_cast 之类的C ++样式强制转换,而不是(int)之类的C样式强制转换
    • 我们尽可能使用const。
    Google C ++样式指南的例外情况包括:
    • 我们使用iostream,并且允许将对iostream的非常量引用传递给函数(这违反了no-non-const-references规则)。
    • 对于get / set方法,假设类成员名为x_,则Google风格的get和set方法将为x()和set_x()。但是,按照OpenFst编码样式,我们将它们称为X()和SetX():例如Mean()和SetMean()。这个特殊的规则是新的。过去,我们采用的方法不一致,我们将更改代码以使其符合标准。
  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/14127330.html
Copyright © 2011-2022 走看看