2010-06-03 68 views
3

這是一個類的宏定義,究竟是什麼?C++宏定義不清

#define EXCEPTIONCLASS_IMPLEMENTATION(name, base, string) : public base  \ 
    {                \ 
public:                 \ 
    name() : base(string) {}           \ 
    name(const x::wrap_exc& next) : base(string,next) {};    \ 
    name(const x::wrap_exc& prev, const x::wrap_exc& next) :   \ 
     base(prev, next) {};           \ 
} 
+0

這有點奇怪。我期望在該宏的開頭看到'class'關鍵字。就像現在一樣,可以寫'class EXCEPTIONCLASS_IMPLEMENTATION(DivByZeroException,MathException,「」);'。 – Novelocrat 2010-06-03 13:21:56

回答

9

異常類的宏定義。

看來有人要你寫這樣的代碼:

class my_exception EXCEPTIONCLASS_IMPLEMENTATION(my_exception, std::exception, "What a mess!") 

預處理器會吐出:

class my_exception : public std::exception { public: my_exception() : std::exception("What a mess!") {} my_exception(const x::wrap_exc& next) : std::exception("What a mess!",next) {}; my_exception(const x::wrap_exc& prev, const x::wrap_exc& next) : std::exception(prev, next) {}; } 

它究竟是什麼?

這是一種憎惡!

+1

除了需要您輸入類頭之前這個宏,我不認爲這是可憎的。任何節省打字都是有用的,國際海事組織。 – 2010-06-03 15:37:50

+0

我很驚訝創建這個宏的人沒有通過包含'class name'來完成類的定義。除此之外,對於有經驗的程序員來說任何不清楚的東西都是沒有用的,因爲這會讓維護成爲一場噩夢。 – Johnsyweb 2010-06-03 21:27:38

3

它是異常的宏,它用標準構造函數創建異常。

+0

所以是名稱()一些類的構造函數或是它的參數? – 2010-06-03 13:16:50

+0

@Tony它是這個類的構造函數。當您使用代碼EXCEPTIONCLASS_IMPLEMENTATION(DivByZeroException,MathException,「」)編寫代碼時,它將擴展爲... DivByZeroException():MathException(「」){} – Andrey 2010-06-03 13:19:10