代码之家  ›  专栏  ›  技术社区  ›  Martin Ba

模板typename的名称大小写

c++
  •  0
  • Martin Ba  · 技术社区  · 14 年前

    给定C++模板类(或函数)定义:

    template<typename T>
    struct Foo {
      T member;
    };
    

    template<typename MORE_EXPRESSIVE_NAME>
    struct More {
      MORE_EXPRESSIVE_NAME* p_;
      More(MORE_EXPRESSIVE_NAME* p);
      ...
    };
    
    template<typename MORE_EXPRESSIVE_NAME>
    More<MORE_EXPRESSIVE_NAME>::More(MORE_EXPRESSIVE_NAME* p)
    : p_(p)
    { }
    

    template<typename MoreExpressiveName>
    struct More {
      MoreExpressiveName* p_;
      More(MoreExpressiveName* p);
      ...
    };
    
    template<typename MoreExpressiveName>
    More<MORE_EXPRESSIVE_NAME>::More(MoreExpressiveName* p)
    : p_(p)
    { }
    

    template<typename mr_exprs_nm>
    struct More {
      mr_exprs_nm* p_;
      More(mr_exprs_nm* p);
      ...
    };
    
    template<typename mr_exprs_nm>
    More<mr_exprs_nm>::More(mr_exprs_nm* p)
    : p_(p)
    { }
    
    3 回复  |  直到 14 年前
        1
  •  6
  •   Matthieu M.    14 年前

    命名约定的主要内容是一致性。无论你采用什么样的约定,请在整个项目中保持它,因此,如果你跳到一个已经采用了约定的项目中,请坚持它(如果没有,请重命名)。

    为了保持一致性,我自己更喜欢命名模板参数,比如命名类型或常量(取决于参数的类型)。在这种情况下,考虑到 More 我也会用骆驼套。

    至于您键入的内容,则取决于:

    • 对于小函数,我通常使用概念名称,可能缩写为: FwdIt 对于 ForwardIterator 例如,作为类型应该实现什么的提醒
    • 对于较大的类/函数,如果可能,我使用概念或有意义的名称(依赖于业务)
        2
  •  1
  •   Alex F    14 年前

    更具表现力的名称看起来像预编译器常量。他并不比福强多少。我投更具表现力的名字。有各种命名约定,但在这种情况下,简单的常识有助于找到最佳解决方案。

        3
  •  1
  •   John Dibling    14 年前

    正如matthieum所说,在命名约定方面,一致性比约定本身更重要。

    CamelCase

    template<typename MoreExpressiveName> ...
    

    我也使用 对于 static const 全局变量

    static const int MyMagicNumber = 42;
    

    underscore_lcase 变量和参数名称。成员变量也得到 trailing_underscrore_ .

    template<typename MoreExpressiveName> 
    More<MoreExpressiveName>::More(MoreExpressiveName* my_thing)
    {
      my_thing_ = my_thing;
    }
    

    ALL_CAPS 对于宏。