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()。这个特殊的规则是新的。过去,我们采用的方法不一致,我们将更改代码以使其符合标准。
  • 相关阅读:
    java——spring中bean的作用域
    java——线程池
    java—如何解决缓存穿透
    java—锁的学习研究
    java--springmvc
    java—多线程—notify/notifyAll
    php 基础复习 2018-06-18
    php 基础复习 2018-06-19
    php 以单下划线或双下划线开头的命名
    mysql 常用sql语句
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/14127332.html
Copyright © 2011-2022 走看看