Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
"James Kanze" a écrit ...Comme a dit Sylvain, c'est un comportement indéfini. (En fait,
avec un compilateur moderne, on pourrait toujours le faire
marcher, mais historiquement, assurer la destruction sans savoir
combien d'éléments il y avait posait pas mal de problèmes.)
Il suffit que Poly2D ait un destructeur correct, non ?
La solution de Sylvain, avec des pointeurs (et un pointeur nul
comme marque de fin) marche, mais a deux inconveniants :
il ne permet pas de passer des temporaires (des expressions du
genre « Point2D( 1.2, 3.4 ) »),
Ben, ça me gêne aussi.et il est trop facile d'oublier le pointeur nul de fin
C'est de la responsabilité du programmeur.
(pointeur qui, au moins formellement, doit avoir
le type Point2D const* -- un 0 ou le symbole NULL
tout court ne suffit pas).
Un cast dans le constructeur ne suffit pas ?
Par exemple:
if (premier == (Point2D *) NULL) ...........
Alors, il y a deux solutions classiques :
celle qui est à la mode :
...........
Il faut, par exemple, que tu as des paramètres
quelque part d'où tu peux tirer des itérateurs,
ce qui est loin d'être évident.
Je n'en ai pas justement.
celle qui marche réelement :
On crée une classe « collecteur », qu'on passe. Le
constructeur devient à peu près :
Poly2D::Poly2D( Collector< Point2D > const& collector )
: _pol( collector.begin(), collector.end() )
{
}
Il y a une raison particulière pour que le collecteur soit template ?
Le collecteur, au font, ce n'est rien d'autre qu'une classe
qui contient un std::vector, et qui fournit aussi un moyen
d'enchaîner des push_back ; std::vector lui-même ferait
l'affaire si push_back renvoiait une référence à la
collection.
Est ce que Poly2D elle-même pourrait faire l'affaire ?
"James Kanze" <james.kanze@gmail.com> a écrit ...
Comme a dit Sylvain, c'est un comportement indéfini. (En fait,
avec un compilateur moderne, on pourrait toujours le faire
marcher, mais historiquement, assurer la destruction sans savoir
combien d'éléments il y avait posait pas mal de problèmes.)
Il suffit que Poly2D ait un destructeur correct, non ?
La solution de Sylvain, avec des pointeurs (et un pointeur nul
comme marque de fin) marche, mais a deux inconveniants :
il ne permet pas de passer des temporaires (des expressions du
genre « Point2D( 1.2, 3.4 ) »),
Ben, ça me gêne aussi.
et il est trop facile d'oublier le pointeur nul de fin
C'est de la responsabilité du programmeur.
(pointeur qui, au moins formellement, doit avoir
le type Point2D const* -- un 0 ou le symbole NULL
tout court ne suffit pas).
Un cast dans le constructeur ne suffit pas ?
Par exemple:
if (premier == (Point2D *) NULL) ...........
Alors, il y a deux solutions classiques :
celle qui est à la mode :
...........
Il faut, par exemple, que tu as des paramètres
quelque part d'où tu peux tirer des itérateurs,
ce qui est loin d'être évident.
Je n'en ai pas justement.
celle qui marche réelement :
On crée une classe « collecteur », qu'on passe. Le
constructeur devient à peu près :
Poly2D::Poly2D( Collector< Point2D > const& collector )
: _pol( collector.begin(), collector.end() )
{
}
Il y a une raison particulière pour que le collecteur soit template ?
Le collecteur, au font, ce n'est rien d'autre qu'une classe
qui contient un std::vector, et qui fournit aussi un moyen
d'enchaîner des push_back ; std::vector lui-même ferait
l'affaire si push_back renvoiait une référence à la
collection.
Est ce que Poly2D elle-même pourrait faire l'affaire ?
"James Kanze" a écrit ...Comme a dit Sylvain, c'est un comportement indéfini. (En fait,
avec un compilateur moderne, on pourrait toujours le faire
marcher, mais historiquement, assurer la destruction sans savoir
combien d'éléments il y avait posait pas mal de problèmes.)
Il suffit que Poly2D ait un destructeur correct, non ?
La solution de Sylvain, avec des pointeurs (et un pointeur nul
comme marque de fin) marche, mais a deux inconveniants :
il ne permet pas de passer des temporaires (des expressions du
genre « Point2D( 1.2, 3.4 ) »),
Ben, ça me gêne aussi.et il est trop facile d'oublier le pointeur nul de fin
C'est de la responsabilité du programmeur.
(pointeur qui, au moins formellement, doit avoir
le type Point2D const* -- un 0 ou le symbole NULL
tout court ne suffit pas).
Un cast dans le constructeur ne suffit pas ?
Par exemple:
if (premier == (Point2D *) NULL) ...........
Alors, il y a deux solutions classiques :
celle qui est à la mode :
...........
Il faut, par exemple, que tu as des paramètres
quelque part d'où tu peux tirer des itérateurs,
ce qui est loin d'être évident.
Je n'en ai pas justement.
celle qui marche réelement :
On crée une classe « collecteur », qu'on passe. Le
constructeur devient à peu près :
Poly2D::Poly2D( Collector< Point2D > const& collector )
: _pol( collector.begin(), collector.end() )
{
}
Il y a une raison particulière pour que le collecteur soit template ?
Le collecteur, au font, ce n'est rien d'autre qu'une classe
qui contient un std::vector, et qui fournit aussi un moyen
d'enchaîner des push_back ; std::vector lui-même ferait
l'affaire si push_back renvoiait une référence à la
collection.
Est ce que Poly2D elle-même pourrait faire l'affaire ?
"James Kanze" a écrit ...Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
J'aime bien :)Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Ce qui est exactement ce que je veux pouvoir écrire.
Tant pis pour les doubles parenthèses, il suffit de le savoir
et de le commenter.
Tu peux aussi utiliser d'autres opérateurs qui ne nécessiteront alors
pas de parenthèses.
Poly2D poly( Point2D(1.2, 3.4) % unAutrePoint % etEncoreUn );
"James Kanze" <james.kanze@gmail.com> a écrit ...
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
J'aime bien :)
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Ce qui est exactement ce que je veux pouvoir écrire.
Tant pis pour les doubles parenthèses, il suffit de le savoir
et de le commenter.
Tu peux aussi utiliser d'autres opérateurs qui ne nécessiteront alors
pas de parenthèses.
Poly2D poly( Point2D(1.2, 3.4) % unAutrePoint % etEncoreUn );
"James Kanze" a écrit ...Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
J'aime bien :)Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Ce qui est exactement ce que je veux pouvoir écrire.
Tant pis pour les doubles parenthèses, il suffit de le savoir
et de le commenter.
Tu peux aussi utiliser d'autres opérateurs qui ne nécessiteront alors
pas de parenthèses.
Poly2D poly( Point2D(1.2, 3.4) % unAutrePoint % etEncoreUn );
"James Kanze" écrivait:Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Et dans le meilleur des mondes possibles :
Polygone p(boost::assign::list_of(A)(B)(C)(Point(0,1)));
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
"James Kanze" <james.ka...@gmail.com> écrivait:
Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Et dans le meilleur des mondes possibles :
Polygone p(boost::assign::list_of(A)(B)(C)(Point(0,1)));
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
"James Kanze" écrivait:Etienne Rousee wrote:
[Constructeur à nombre variable d'arguments]
celle qui est à la mode :
On fait du constructeur un template, et on lui passe des
itérateurs :
celle [la ? solution] qui marche réelement :
On crée une classe « collecteur », qu'on passe.
Et dans le meilleur des mondes possibles :
Polygone p(boost::assign::list_of(A)(B)(C)(Point(0,1)));
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
(On remarque le deuxième jeu de parenthèse. C'est pourquoi
je le considère un peu l'obfuscation ; quelqu'un qui lit le
code risque de ne pas les voir de premier abord, et de ne
pas comprendre ce qui se passe. Mais au moins, si tu les
oublies, le compilateur râle.)
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Une autre possibilité, c'est l'opérateur +=.
Une autre possibilité, c'est l'opérateur +=.
Une autre possibilité, c'est l'opérateur +=.
On Feb 22, 8:56 pm, Franck Branjonneau wrote:"James Kanze" écrivait:Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Le type de l'expression, c'est bien ce que renvoit l'opérateur
virgule. On en fait ce qu'on veut.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
La métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur (des
types, etc.), on n'a pas le choix, et on y passe. Mais sinon, je
préfère rester dans la lisible.
On Feb 22, 8:56 pm, Franck Branjonneau <fas...@free.fr> wrote:
"James Kanze" <james.ka...@gmail.com> écrivait:
Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Le type de l'expression, c'est bien ce que renvoit l'opérateur
virgule. On en fait ce qu'on veut.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
La métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur (des
types, etc.), on n'a pas le choix, et on y passe. Mais sinon, je
préfère rester dans la lisible.
On Feb 22, 8:56 pm, Franck Branjonneau wrote:"James Kanze" écrivait:Si on aime l'obfuscation, on peut même ajouter des
surcharges de l'opérateur virgule :
Ce qui permet l'écriture :
Poly2D poly( (Point2D( 1.2, 3.4 ),
unAutrePoint,
etEncoreUn) ) ;
Moi j'aime bien ;-) Dommage que l'expression (A, B, ..., C) ne soit
pas le std::tuple<> qui va bien.
Le type de l'expression, c'est bien ce que renvoit l'opérateur
virgule. On en fait ce qu'on veut.
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
La métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur (des
types, etc.), on n'a pas le choix, et on y passe. Mais sinon, je
préfère rester dans la lisible.
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ? La
métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur
(des types, etc.), on n'a pas le choix, et on y passe. Mais
sinon, je préfère rester dans la lisible.
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ? La
métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur
(des types, etc.), on n'a pas le choix, et on y passe. Mais
sinon, je préfère rester dans la lisible.
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ? La
métaprogrammation avec templates est peut-être d'une puissance
extrème, mais il ne brille pas par sa lisabilité. Quand la
génération dépend des données connues seulement du compilateur
(des types, etc.), on n'a pas le choix, et on y passe. Mais
sinon, je préfère rester dans la lisible.
On 23 Feb 2007 01:13:11 -0800, "James Kanze" :Une autre possibilité, c'est l'opérateur +=.
Barf. Dans le cas d'un objet mathématique (point, ensemble de points,
vecteur, etc.), mieux vaut AMHA laisser aux opérateurs mathématiques
(+, etc.) leur signification originelle.
D'autant qu'à un polygone, on peut très bien vouloir rajouter
un vecteur (qui, comme un point, est un agrégat de deux
coordonnées), pour effectuer une translation.
On 23 Feb 2007 01:13:11 -0800, "James Kanze" <james.ka...@gmail.com>:
Une autre possibilité, c'est l'opérateur +=.
Barf. Dans le cas d'un objet mathématique (point, ensemble de points,
vecteur, etc.), mieux vaut AMHA laisser aux opérateurs mathématiques
(+, etc.) leur signification originelle.
D'autant qu'à un polygone, on peut très bien vouloir rajouter
un vecteur (qui, comme un point, est un agrégat de deux
coordonnées), pour effectuer une translation.
On 23 Feb 2007 01:13:11 -0800, "James Kanze" :Une autre possibilité, c'est l'opérateur +=.
Barf. Dans le cas d'un objet mathématique (point, ensemble de points,
vecteur, etc.), mieux vaut AMHA laisser aux opérateurs mathématiques
(+, etc.) leur signification originelle.
D'autant qu'à un polygone, on peut très bien vouloir rajouter
un vecteur (qui, comme un point, est un agrégat de deux
coordonnées), pour effectuer une translation.
"James Kanze" écrivait:
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Qu'est-ce que tu préfères : te mettre au lisp ou au templates ?
;-) (Non, je ne me mettrais pas à AWK ;-)
"James Kanze" <james.ka...@gmail.com> écrivait:
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Qu'est-ce que tu préfères : te mettre au lisp ou au templates ?
;-) (Non, je ne me mettrais pas à AWK ;-)
"James Kanze" écrivait:
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Qu'est-ce que tu préfères : te mettre au lisp ou au templates ?
;-) (Non, je ne me mettrais pas à AWK ;-)
On Feb 23, 11:06 pm, Franck Branjonneau wrote:"James Kanze" écrivait:
[...]Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Tu mets de l'elisp dans tes procédures de build ? :-)
Les générateurs de ce genre sont
integrés dans les procédures de build. Du coup, il faut qu'ils
soit dans un langage garanti d'être présent, et plus ou moins
garanti d'être connu de quiconque qui va maintenir le code.
Je travaille prèsqu'exclusivement dans des environements Unix. En
dehors de C/C++, je ne suppose que ce qui est garanti par Posix.
(Et mon système de build, qui se base sur GNU make.) Je suppose
également que quelqu'un qui développe sur Unix connaît un peu
Posix. (Bien que... je suis parfois deçu à cet égard.)
On Feb 23, 11:06 pm, Franck Branjonneau <fas...@free.fr> wrote:
"James Kanze" <james.ka...@gmail.com> écrivait:
[...]
Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Tu mets de l'elisp dans tes procédures de build ? :-)
Les générateurs de ce genre sont
integrés dans les procédures de build. Du coup, il faut qu'ils
soit dans un langage garanti d'être présent, et plus ou moins
garanti d'être connu de quiconque qui va maintenir le code.
Je travaille prèsqu'exclusivement dans des environements Unix. En
dehors de C/C++, je ne suppose que ce qui est garanti par Posix.
(Et mon système de build, qui se base sur GNU make.) Je suppose
également que quelqu'un qui développe sur Unix connaît un peu
Posix. (Bien que... je suis parfois deçu à cet égard.)
On Feb 23, 11:06 pm, Franck Branjonneau wrote:"James Kanze" écrivait:
[...]Enfin, si tu as une borne supérieur au nombre d'éléments, il y a
toujours le surcharge. Un peu pénible à entrée (surtout si la
borne supérieur est élevée. (Je me vois mal taper une centaine
de constructeurs, tous rigueureusement identique sauf en ce qui
concerne le nombre de paramètres. Mais un petit script d'AWK...)
Remplace ton AWK par un compilateur C++ ;-) :
Remplacer quelque chose de facilement lisible par quelque chose
que je ne comprendrais pas moi-même dans une semaine ?
C'est un argument imparable si ce n'est que moi j'écrirais un script
elisp.
Tu mets de l'elisp dans tes procédures de build ? :-)
Les générateurs de ce genre sont
integrés dans les procédures de build. Du coup, il faut qu'ils
soit dans un langage garanti d'être présent, et plus ou moins
garanti d'être connu de quiconque qui va maintenir le code.
Je travaille prèsqu'exclusivement dans des environements Unix. En
dehors de C/C++, je ne suppose que ce qui est garanti par Posix.
(Et mon système de build, qui se base sur GNU make.) Je suppose
également que quelqu'un qui développe sur Unix connaît un peu
Posix. (Bien que... je suis parfois deçu à cet égard.)