模板类型名称的大小写

Mar*_* Ba 0 c++

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

template<typename T>
struct Foo {
  T member;
};
Run Code Online (Sandbox Code Playgroud)

- 如果在一个更复杂的情况下我想让typename更具表现力,那么接受或避免使用哪种命名约定(以及为什么).例子:

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)
{ }
Run Code Online (Sandbox Code Playgroud)

要么

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

template<typename MoreExpressiveName>
More<MORE_EXPRESSIVE_NAME>::More(MoreExpressiveName* p)
: p_(p)
{ }
Run Code Online (Sandbox Code Playgroud)

要么

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)
{ }
Run Code Online (Sandbox Code Playgroud)

Mat*_* M. 6

命名约定的主要内容是一致性.无论你采用什么约定,请在整个项目中保留它,因此如果你进入已经采用的项目,坚持下去(如果没有,重命名).

话虽这么说,在我看到的大多数命名约定中,所有大写字母通常都是为宏保留的,所以我绝对会避免它.

为了一致性,我自己更喜欢命名模板参数,比如命名类型或常量(取决于参数的类型).在这种情况下,鉴于你使用More我也会使用驼峰的情况.

至于你输入的内容,取决于:

  • 对于小功能,我通常使用这个概念的名称,可能是缩写:FwdIt用于ForwardIterator例如,作为类型应该实现什么样的提醒
  • 对于更大的类/函数,如果可能,我使用Concept或有意义的名称(依赖于业务)