推 tropical72:這篇好文我需要一點時間研究一下,謝謝littleshan ^^ 01/29 20:20
※ 引述《tropical72 (藍影)》之銘言:
: 若專案一大,檔案一多,同時有幾個 header 可能都是固定的,
: 意指在很多 .h (是.h, 不是.cpp)裡面,可能還要再 include
: map / dequeue / vector / string 等 header,
: 這種情況下,是否仿 vs 作法,直接再開一個 all_header.h,
: 將所有的 header 都丟進去,所有.cpp 只要引入 all_header.h 即可?
VC 這樣做的目的是為了 precompiled header,但是:
1. 並非所有的 compiler 都支援 precompiled header
如果 compiler 不支援,而每個 .cpp 都引用了所有的 header
會浪費許多編譯時間 (尤其你用了 boost 的時後 XD)
2. 這樣做很難看出模組間的相依性
假如其中某個 .cpp 的功能可以拿去另一支程式重覆利用
直接拿出來是無法編譯的,因為你不知道他用了哪些 header
所以我是這樣做的:
#include "stdafx.h"
#include <vector>
#include <map>
...
也就是同時引用了 all_header.h 與該 .cpp 使用到的 header
這麼一來
1. 在不支援 precompiled header 的 compiler 上,可以使用空的 stdafx.h
這麼一來就不會浪費 compile time
2. 你看最前面就知道這個 .cpp 用到哪些 header
3. 因為 header 都使用了 include guard,所以這樣寫並不會造成重覆引入
: 問題二:獨體模式
: 以 Process Mangement (考慮 add, del, display processes) 而言,
: 由於正確的 Processes List 只有一份,故認為適用獨體模式。
: 而較讓我模糊的是,若欲管理 Console Window 時,假設包成 class xConsole,
: member function 包含 SetConsoleSize、SetConsoleIcon 等,
: 是否適用獨體模式?模糊的地方如下述
: (a) 由於 Console Window 不只一份,一種想法是在 constructor 時,
: 將其 instance 指定為某個 pid 或某個 hwnd,
: 如此一來,一個 xConsole 只能管理一個 Console Window,
: 而程式中可允許有多個 xConsole Object <非獨體>
: (b) xConsole 之 data member,直接再丟一個 console process list,
: 接著操作時,都必須先指定某個 console pid,再進行其操作,
: 如此一來,正確的 console process list 只有一份,這麼看來卻又像是獨體模式
: 試問若考慮此情況,該如何架構這份 class 為佳?
: 最後先謝謝各位的意見與指導。
(a) 比較好
若是照 (b) 的方式寫,這個 class 就不叫 xConsole 了,
應該是 xConsoleList 才對
class 的功能應該單一而明確
而且 singleton 不是什麼好東西,能免則免吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.67.68