2010-06-03 8 views
3

Est-ce une définition de macro pour une classe ou qu'est-ce exactement?Définition de macro C++ peu claire

#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

C'est un peu bizarre. Je m'attendrais à voir le mot-clé 'class' au début de cette macro. Comme c'est le cas maintenant, on écrirait 'class EXCEPTIONCLASS_IMPLEMENTATION (DivByZeroException, MathException," ");'. – Novelocrat

Répondre

9

est une définition de macro pour une classe d'exception.

Il semble que quelqu'un veut vous d'écrire du code comme ceci:

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

Le pré-processeur craché:

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) {}; } 

Qu'est-ce exactement?

C'est une abomination!

+1

Mis à part le fait qu'il vous oblige à taper la tête de classe avant la macro, je ne pense pas que ce soit une abomination. Tout ce qui sauve la frappe est utile, IMO. –

+0

Je suis étonné que la personne qui a créé cette macro n'ait pas complété la définition de classe en incluant 'class name'. Cela mis à part, tout ce qui n'est pas clair pour un programmeur expérimenté n'est pas utile car cela rend la maintenance un cauchemar. – Johnsyweb

3

il s'agit d'une macro pour exception, qui crée une exception avec les constructeurs standard.

+0

est donc le nom() un constructeur d'une classe ou est-ce un paramètre ??? –

+0

@Tony c'est le constructeur de cette classe. lorsque vous écrivez dans le code 'EXCEPTIONCLASS_IMPLEMENTATION (DivByZeroException, MathException," ")' il va se développer à ... DivByZeroException(): MathException ("") {} – Andrey