模板參數(shù)名命名慣例
以下模板參數(shù)名命名慣例來自于stlsoft,詳細(xì)說明于《Extended STL》。
模板參數(shù)一般是一個(gè)或者兩個(gè)大寫字母,
例如T(type/value-type)、S(sequence/string)、
C(container/character)、VP(value policy type)等等。
這樣做有兩個(gè)原因。
首先,全大寫字母的單詞可能被宏定義。
相反,宏定義一般不會(huì)僅有一個(gè)或兩個(gè)字符。
所以模板參數(shù)和宏定義沒有命名沖突。
(我們不應(yīng)該自定義特別短的宏。
如果一個(gè)庫定義了一兩個(gè)字符的短宏,
一般來說,它絕不會(huì)是一個(gè)可靠的庫。)
第二,我們將在類中定義成員類型,其名字必須不同于模板參數(shù)名。
以下代碼中,成員類型和模板參數(shù)同名,無法通過編譯:
template <typename iterator>
struct thing
{
typedef iterator iterator; // Compile error
};
必須如下代碼更改:
template <typename I>
struct thing
{
typedef I iterator;
};
在定義模板類時(shí),有一個(gè)慣例,
即一開始就以上面短小的模板參數(shù)名為基礎(chǔ),
定義各個(gè)成員類型。
查看StlPort代碼:
template <class _Key, class _Tp, ...>
class map
{
typedef map<_Key, _Tp, _Compare, _Alloc> _Self;
public:
typedef _Key key_type;
typedef _Tp data_type;
typedef _Tp mapped_type;
typedef pair<const _Key, _Tp> value_type;
typedef _Compare key_compare;
...
}
其模板參數(shù)命名的原則是一致的:較短,然后立即定義較長的類型名。
用前導(dǎo)下劃線防止命名沖突。
(轉(zhuǎn)載請注明來源于金慶的專欄)