给定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)
命名约定的主要内容是一致性.无论你采用什么约定,请在整个项目中保留它,因此如果你进入已经采用的项目,坚持下去(如果没有,重命名).
话虽这么说,在我看到的大多数命名约定中,所有大写字母通常都是为宏保留的,所以我绝对会避免它.
为了一致性,我自己更喜欢命名模板参数,比如命名类型或常量(取决于参数的类型).在这种情况下,鉴于你使用More我也会使用驼峰的情况.
至于你输入的内容,取决于:
FwdIt用于ForwardIterator例如,作为类型应该实现什么样的提醒