OVH Cloud OVH Cloud

Comment remplacer une macro par un équivalent plus C++

12 réponses
Avatar
kangs
Bonjour,

Pour simplifier du code j'utilise des macros, en C++ ce n'est par le
must
parait il.

Voici mon cas :

class A
{
public:
int indicateur1() const;
int indicateur2() const;
double indicateur3() const;
string indicateur4() const;

// ...
};

class FromBDD
: public A
{
public:
// ...
};

La class A contient environ une dizaine de variables, les donn=E9es de A
sont
calcul=E9es et perdues en fin de programme.

La class FromBDD h=E9rite de A et m=E9morise les indicateurs dans une BDD.

J'ai besoins de comparer chaque variable de A avec FromBDD et
d'indiquer les
variables qui ont chang=E9es visuellement.

Actuellement je fais en gros :
#define CMP( indicateur )
if { instA.indicateur() !=3D fromBDD.indicateur() )
{
do_1( irow, icol );
}

for ( ... )
{
CMP( indicateur1 );
CMP( indicateur2 );
...
}

Est ce qu'il existe un moyen permettant de ce passer de la macro CMP
sans
avoir =E0 copier/coller le code ?

Merci.

2 réponses

1 2
Avatar
ptyxs
Au bout du compte vous semblez rejoindre ce que dit Bjarne
Stroustrup :

"We consider macros seriously overused, but there are no reasonable
and complete alternatives to the use of macros in C programs. It can
even be hard to avoid them in C++ programs (especially if you have to
write programs that have to be portable to very old compilers or to
platforms with unusual constraints)."
in Programming Principles and Practise Using C++ - Chapitre 27, p.
1022
Avatar
pjb
ptyxs writes:

Au bout du compte vous semblez rejoindre ce que dit Bjarne
Stroustrup :

"We consider macros seriously overused, but there are no reasonable
and complete alternatives to the use of macros in C programs. It can
even be hard to avoid them in C++ programs (especially if you have to
write programs that have to be portable to very old compilers or to
platforms with unusual constraints)."
in Programming Principles and Practise Using C++ - Chapitre 27, p.
1022




Les templates permettent de tout faire (Turing Complete), mais
certaines choses ne se font pas aussi facilement avec les templates
qu'avec des macros, même des macros aussi limitées que celles de cpp,
qui elles ne sont pas Turing Complete, il faudrait ajouter une boucle,
ce qui peut se faire dans le makefile ou un script:

http://www.ioccc.org/2001/herrmann1.hint
http://www.ioccc.org/2001/herrmann1.c
http://www.ioccc.org/2001/herrmann1.sh
http://www.ioccc.org/2001/herrmann1.gcd


--
__Pascal Bourguignon__
1 2