作者tropical72 (藍影)
看板C_and_CPP
標題[問題] 條件編譯 / 獨體模式 問題
時間Sun Jan 29 07:16:51 2012
鑑於版面整潔,習慣所有問題都集中在一篇裡發問,
這是二個獨立的問題,只要任何一個問題有經驗、看法、意見,
請不吝提出指導,非常感謝各位。
問題前述
這二個問題源自於,欲封裝一 Process Management Class,
以此前提探討或許會清楚些。
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
visual c++
問題一:防 multi-include 問題
一般在防 multi-include 時,在 .h 裡大概會有三行
#ifdef MY_H_
#define MY_H_
// do something
#endif
若專案一大,檔案一多,同時有幾個 header 可能都是固定的,
意指在很多 .h (是.h, 不是.cpp)裡面,可能還要再 include
map / dequeue / vector / string 等 header,
這種情況下,是否仿 vs 作法,直接再開一個 all_header.h,
將所有的 header 都丟進去,所有.cpp 只要引入 all_header.h 即可?
問題二:獨體模式
以 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 為佳?
最後先謝謝各位的意見與指導。
--
世界上有種,
將 不可能 轉換為 無限可能 的強大力量,
我稱它為 - 信念。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.69.239
推 NDark:你1.的答案就是pch 01/29 10:20
→ applecool:ifndef 01/29 11:00
推 chchwy:#ifndef 這種大鍋炒.h檔可能會導致編譯緩慢 01/29 11:45
推 johnlinvc:#pragma once 01/29 12:00
推 littleshan:不要用 #pragma once 非標準 01/29 12:19
推 johnlinvc:非標準但絕大多數都支援 01/29 12:50
→ tropical72:#pragma once 應是vc特有吧?有其他compiler支援? 01/29 20:02
→ tropical72:補一下,感謝NDark提供的keyword,那個很有用! 01/29 20:09
推 johnlinvc:Wiki 上是寫GCC,VC++,Intel,Clang都支援#pragma once 01/29 23:17