簡體   English   中英

模板類型名的名稱大小寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM