[英]Case of names for template typename
給定一個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)
{ }
命名約定的主要內容是一致性。 無論采用哪種約定,請在整個項目中保持一致,因此,如果您跳入已經采用一種約定的項目,請堅持使用(如果沒有,請重命名)。
話雖這么說,在我所見的大多數命名約定中,所有大寫字母通常都保留給宏使用,因此我絕對會避免使用。
我本人更喜歡為模板參數命名,例如為類型或常量命名(取決於參數的種類),以保持一致性。 在這種情況下,假設您使用“ More
我也將使用駝峰式大小寫。
至於鍵入內容,則取決於:
FwdIt
for ForwardIterator
,以提醒類型應實現的類型 MORE_EXPRESSIVE_NAME看起來像預編譯器常量。 mr_exprs_nm並不比Foo好多少。 我投票支持MoreExpressiveName。 有多種命名約定,但是在這種情況下,簡單的常識有助於找到最佳的解決方案。
正如Matthieu M.所說,在命名約定時,一致性比約定本身更為重要。
就是說,這是我使用的約定:
CamelCase
用於結構,類,typedef和模板參數名稱。 基本上,任何看起來像類型名稱的東西都是CamelCase。
template<typename MoreExpressiveName> ...
我還將CamelCase
用於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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.