幫助:風格手冊
此頁面包含一個設計指南,旨在幫助在本維基中保持一致的風格和格式。請注意,此指南列表既非最終也非完整,即可以新增新的指南,並且如果有利,可以更改當前的指南。
本節不完整 原因:新增更多指向可作為“規範”示例頁面的連結。 |
目錄 |
[編輯] 頁面結構
本維基的大多數頁面遵循以下模式
[編輯] 標題覆蓋
標題覆蓋幾乎是強制性的,否則 MediaWiki 將顯示頁面的路徑。
如果特性不是任何類的成員,則直接使用 {{ctitle}} 或 {{cpp/title}} 覆蓋標題。否則,將建立一個抽象容器類名的輔助模板。例如,考慮 std::class::func()
cpp/blah/class/func
包含 {{cpp/blah/class/title|func}}
而 Template:cpp/blah/class/title
包含 {{cpp/title|n=class|{{{1}}}}}
。此輔助模板用於該類的所有成員。
[編輯]
導航欄透過提供指向相關頁面的連結來改善導航。導航欄通常使用 {{navbar}} 模板實現。最終的定義通常放在 Template:path/to/page/navbar
。
{{navbar}} 模板定義了一個始終可見的標題和懸停時顯示的內容。兩者的定義通常分別放在 Template:path/to/page/navbar heading
和 Template:path/to/page/navbar content
的單獨模板中。
內容通常是相關函式和類的列表。該列表通常使用 nv 模板族實現。
導航欄的定義包括其每個父頁面的標題和內容模板。
{{mark c++11}} 應在導航欄中使用,而不是 {{mark since c++11}},以節省空間。
[編輯] 類或函式的宣告
宣告按照標頭檔案中定義的方式放置。模板和引數名稱儘可能根據本維基中的常用名稱進行重新命名。dcl 族模板用於處理格式。
[編輯] 描述
描述通常包含一些解釋類/函式/物件等行為的文字,以及分類到單獨部分(見下文)的其他資訊。
描述文字的第一句話必須總結該特性的行為。其長度不應超過約200個字元(大約兩行文字)。
[編輯] 類
類的描述通常遵循以下模式(按順序排列的章節列表)
- 概要
- 描述文字
- 類不變數
- 模板引數(如果該類是模板)
- 成員型別(公共/私有/保護/僅暴露)
- 成員函式(公共/私有/保護/僅暴露)
- 成員物件(公共/私有/保護/僅暴露)
- 非成員函式
- 輔助型別
- 輔助類
- 備註(可能包括 FTM 表)
- 示例
- 缺陷報告(如果有)
- 參考(指向規範文件的連結)
- 另請參閱
- 外部連結(如果有)
dsc 模板族用於處理成員型別、函式或物件列表以及相關非成員函式或類列表的格式。
通常,相同的成員描述片段(例如 {{dsc mem fun| cpp/component/class/fun_function| 函式的描述}}) 將包含在其他頁面的另請參見部分中。為了減少重複,值得將這些片段放入單獨的模板中,然後使用 {{dsc inc}} 來包含它們。
例如:
在 cpp/component/class
中
{{dsc begin}} {{dsc h1 | Member functions}} {{dsc inc | cpp/component/class/dsc fun_function}} {{dsc end}}
在 cpp/component/class/another_function
中
... ... ===See also=== {{dsc begin}} {{dsc inc | cpp/component/class/dsc fun_function}} {{dsc end}}
在 Template:cpp/component/class/dsc fun_function
中
{{dsc mem fun | cpp/component/class/fun_function | description of the function}}
如果相同的描述片段在多個類中以相同的方式使用,例如在容器庫中,一個模板可以消除多達20個地方的重複。
[編輯] 函式
函式的描述通常遵循以下模式(按順序排列的章節列表)
- 概要
- 描述文字
- 模板引數(如果函式是模板)
- 引數
- 返回值
- 前置條件
- 後置條件
- 異常
- 複雜度
- 備註(可能包括 FTM 表)
- 可能的實現
- 示例
- 缺陷報告(如果有)
- 參考(指向規範文件的連結)
- 另請參閱
- 外部連結(如果有)
所有函式引數名稱都以 等寬字型 書寫。
par 模板族用於處理引數描述的格式。
應省略引數、返回值或異常等規範的空章節。一種已棄用但仍廣泛使用的方法是用“(none)”標籤標記空章節。
{{eq fun}} 或 {{eq impl}} 可用於呈現等效程式碼(可能的實現)。
{{example}} 可用於呈現示例。
[編輯] 物件、常量、型別
物件、常量或型別的描述通常只包含描述。
[編輯] 演算法函式物件(niebloids)
演算法函式物件(又稱 niebloid)的描述通常遵循與函式相同的模式,但引言中應包含 {{cpp/ranges/niebloid}}。
本節不完整 原因:另外,新增一個帶有示例的連結。 |
[編輯] 概念
概念的描述通常只包含描述。
本節不完整 原因:我們需要更多的章節來使其更具結構性嗎?例如,一個專門用於形式語義要求的章節? |
[編輯] 另請參見列表
列出相關函式、類等。{{dsc ...}} 模板族用於處理格式。
[編輯] 程式碼格式
[編輯] 大小寫
名稱的大小寫方式與大多數 C++ 標準中的方式相同。標準組件的文件應遵循以下風格:
- 函式引數使用
small_caps
風格 - 模板引數使用
CamelCase
風格
在示例和其他文件中,適用以下附加指南:
- 自定義類名使用
CamelCase
風格 - 變數名使用
small_caps
風格 - 宏和常量名使用
ALL_CAPS
風格
[編輯] 間距和縮排
- 使用 K&R 縮排風格(參見 K&R TBS)。
- 標準結構,即
for
、while
、if
等,在識別符號和左括號之間有一個空格,例如:for (...)
. - 函式名與括號之間,以及括號與括號內的內容之間沒有空格,例如
fun(...)
。 - 模板名與
<
符號之間,以及<
和>
符號與模板引數之間沒有空格,例如tmp<...>
。 - 多個函式或模板引數之間用逗號後的空格分隔。
- 引用和指標(
&
和*
)修飾符與型別名之間沒有空格(例如int& b
)。 - 如果函式的引數跨多行,則所有引數的縮排與左括號對齊。模板引數也如此。
例如:
#include <vector> std::vector<int, MyAllocator> v; int complex_function(int long_param_name, int& another_param_name); int main(int argc, char* argv[]) { if (argc == 2) { std::cout << argv[0] << '\n'; std::cout << argv[1] << '\n'; } else std::cout << argv[0] << '\n'; }
並非所有這些規則都適用於詳細的特性宣告(那些進入 {{dcl ***}}
模板的),因為需要額外的可讀性。例外包括:
- 函式模板的
<
和>
符號與模板引數之間有空格。 - 類模板的引數分多行排列。
- 對於函式引數,如果是模板,則
<
和>
符號與模板引數之間沒有空格。此外,分隔模板引數的逗號後面沒有空格。
例如:
template < class TemplateParam, |
||
template< class TemplateParam, class TemplateParam2 > int function_template( MyTemplate<T,Param> my_template_param, |
||
本節不完整 原因 我們需要開發一個推薦的
|
[編輯] 另請參見
- 幫助:模板
-
本節不完整
原因:新增有用的 MediaWiki 連結,例如指向“字串解析函式”或“魔術字”:)