我是一個新手,我想在良好的實踐和設計中讓自己更好,所以在閱讀以下內容之前先考慮一下。DEFINE宏在所有平臺上工作?
我正在創建一個單例類,並且我有很多靜態成員。而不是每次像這樣調用成員...
THECLASS::member
我在考慮使用一個定義的宏來縮短它。
#define(THECLASS::member, shortMember);
所以我的問題是,這會損害跨平臺或交叉編譯器。
我是一個新手,我想在良好的實踐和設計中讓自己更好,所以在閱讀以下內容之前先考慮一下。DEFINE宏在所有平臺上工作?
我正在創建一個單例類,並且我有很多靜態成員。而不是每次像這樣調用成員...
THECLASS::member
我在考慮使用一個定義的宏來縮短它。
#define(THECLASS::member, shortMember);
所以我的問題是,這會損害跨平臺或交叉編譯器。
實際上,您的定義不會在任何地方工作。它應該是:
#define shortMember THECLASS::member
和良好的做法是不試圖挽救按鍵–可讀性更重要的是,和別人讀你的代碼,希望看到theClass描述::成員,而不是shortMember,因爲那時他知道在哪裏尋找一個定義。
+1可讀性更重要。你只能輸入一段代碼(比喻),但它會被讀取很多次,而不僅僅是你自己。 – ChrisF 2010-06-19 17:02:38
你有shortMember和THECLASS :: member交換。編輯:我看你已經修好了。 – 2010-06-19 17:06:14
我認爲這是一個很好的觀點。 – numerical25 2010-06-19 17:15:12
如果你的類是由所有的靜態方法,你可以改爲聲明namespace
與方法,那麼當你要使用的方法.cpp文件,包括文件的頂部:
using namespace [your-namespace];
只是不要在頭文件中這樣做,否則會污染包含此頭的所有其他文件的名稱空間。
最有可能的,但是你打開了自己的名字空間衝突,有階級本來應該避免的,所以它可能不是一個好主意。
您將需要使用正確的語法的宏定義:
#define shortMember THECLASS::member
然而,不這樣做。
所有的宏都在一個命名空間中,並且替換髮生在任何地方,所以最終會導致巨大的維護頭痛。
這傷害了代碼的可讀性和可理解性,因爲它使得它變得更加困難,這裏的名字來自於和他們指
在這種情況下,比較好的做法是拼寫出了名的地方你用吧。
定義將起作用,但不是您在問題中寫入的定義。沿着線的東西:
class SingletonImpl {
...
SingletonImpl *getInstance() { return m_instance; }
}
#define SINGIMPL SingletonImpl::getInstance()
然後可以這樣使用:
SINGIMPL->whatever();
但是請記住,宏只是做文本替換,因此忽略之類的命名空間。
要回答標題中的問題,是的,正確書寫的DEFINE可以在所有平臺上使用。然而,正如其他人所說,由於所列舉的原因,這對您的目的不是一個好主意。
除了下面的評論,你應該考慮[根本不使用單例模式](http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-從未有-因爲-1995 /)。 – 2010-06-19 17:05:41