je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent en
compte la valeur de REAL. Soit un truc du genre:
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Benoit
Loïc Joly wrote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions,
qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas
car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans le
code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Benoit
Florent C.
ben_cal wrote:
Loïc Joly wrote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Benoit
#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe #else #define EPSILON 1e-4 #endif
Ca devrait aller ça non ?
flure
ben_cal wrote:
Loïc Joly wrote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions,
qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le
cas car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans
le code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?
Benoit
#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define EPSILON 1e-4
#endif
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Benoit
#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe #else #define EPSILON 1e-4 #endif
Ca devrait aller ça non ?
flure
Matthieu Moy
"Florent C." writes:
#ifdef REAL #define EPSILON 1e-6 //pas sur pour la syntaxe #else #define EPSILON 1e-4 #endif
Ca devrait aller ça non ?
Sans les espaces avant les '#' ;-)
Le problème à l'origine, c'est que le préprocesseur C/C++ ne peut pas faire de comparaison de chaines.
La solution avec templates me parait plus proche de la solution cherchée.
template<class T> class EPSILON { static REAL value; };
class EPSILON<float> { static REAL value; };
REAL EPSILON<float>::value = ...;
class EPSILON<long> { static REAL value; };
REAL EPSILON<long>::value = ...;
et utiliser ensuite EPSILON<REAL>::value.
(non testé, et sans doute améliorable !)
-- Matthieu
"Florent C." <flure_NOT_@free.fr> writes:
#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define EPSILON 1e-4
#endif
Ca devrait aller ça non ?
Sans les espaces avant les '#' ;-)
Le problème à l'origine, c'est que le préprocesseur C/C++ ne peut pas
faire de comparaison de chaines.
La solution avec templates me parait plus proche de la solution
cherchée.
template<class T>
class EPSILON {
static REAL value;
};
#ifdef REAL #define EPSILON 1e-6 //pas sur pour la syntaxe #else #define EPSILON 1e-4 #endif
Ca devrait aller ça non ?
Sans les espaces avant les '#' ;-)
Pourquoi ?
-- Loïc
espie
In article <4035c98b$, ben_cal wrote:
Loïc Joly wrote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Tu es sur que les gens avec qui tu travailles font du C++ ? Parce que la, l'utilisation a outrance de REAL comme option de compilation ressemble a une utilisation abusive du preprocesseur.
Surtout que, comme on t'a deja repondu, le C++ a des solutions parfaitement appropriees au type de probleme auquel tu as affaire. Essentiellement, les traits de la bibliotheque standard (numeric_limits<>), et peut-etre un typedef raisonnable quelque part histoire de definir le type de reels employes (et encore, il y a sans doute une bonne partie de la bibliotheque qui gagnerait a savoir gerer les deux, et a utiliser des template pour instancier le type qui va bien).
Les #define REAL float ou #define REAL double me rappellent de treees vieux souvenirs de programmation C, et font partie de ces techniques que je ne suis pas DU TOUT decu d'avoir laisse derriere moi lors de la migration vers du C++ moderne.
In article <4035c98b$1@epflnews.epfl.ch>,
ben_cal <lecallennec@yahoo.fr> wrote:
Loïc Joly wrote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions,
qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas
car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans le
code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?
Tu es sur que les gens avec qui tu travailles font du C++ ?
Parce que la, l'utilisation a outrance de REAL comme option de compilation
ressemble a une utilisation abusive du preprocesseur.
Surtout que, comme on t'a deja repondu, le C++ a des solutions parfaitement
appropriees au type de probleme auquel tu as affaire. Essentiellement,
les traits de la bibliotheque standard (numeric_limits<>), et peut-etre un
typedef raisonnable quelque part histoire de definir le type de reels
employes (et encore, il y a sans doute une bonne partie de la bibliotheque
qui gagnerait a savoir gerer les deux, et a utiliser des template pour
instancier le type qui va bien).
Les #define REAL float ou #define REAL double
me rappellent de treees vieux souvenirs de programmation C, et font partie
de ces techniques que je ne suis pas DU TOUT decu d'avoir laisse derriere
moi lors de la migration vers du C++ moderne.
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce qui ne te conviens pas avec ?
A moins que j'ai rate un truc, mais les solutions proposees suppposent que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas car il est defini dans les options de compilation... Donc, je me retrouve avec un REAL deja defini et utilise partout dans le code. Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en ne changeant que cette option de compilation... Ya t'il un truc que j'aurais manque?
Tu es sur que les gens avec qui tu travailles font du C++ ? Parce que la, l'utilisation a outrance de REAL comme option de compilation ressemble a une utilisation abusive du preprocesseur.
Surtout que, comme on t'a deja repondu, le C++ a des solutions parfaitement appropriees au type de probleme auquel tu as affaire. Essentiellement, les traits de la bibliotheque standard (numeric_limits<>), et peut-etre un typedef raisonnable quelque part histoire de definir le type de reels employes (et encore, il y a sans doute une bonne partie de la bibliotheque qui gagnerait a savoir gerer les deux, et a utiliser des template pour instancier le type qui va bien).
Les #define REAL float ou #define REAL double me rappellent de treees vieux souvenirs de programmation C, et font partie de ces techniques que je ne suis pas DU TOUT decu d'avoir laisse derriere moi lors de la migration vers du C++ moderne.