Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
Comme mon code C/C++ doit tourner sur une multitude de plateformes
étranges, je redéfinis les types prédéfinis (bool, int, float) avec
éventuellement suivant des plateformes des cast affreux (typedef float
myInt) pour contourner les multiples bugs des plateformes/compilateurs
(machines 64 bits avec entiers 32 bits, machines avec entiers 16 bits,
etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
Comme mon code C/C++ doit tourner sur une multitude de plateformes
étranges, je redéfinis les types prédéfinis (bool, int, float) avec
éventuellement suivant des plateformes des cast affreux (typedef float
myInt) pour contourner les multiples bugs des plateformes/compilateurs
(machines 64 bits avec entiers 32 bits, machines avec entiers 16 bits,
etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
Comme mon code C/C++ doit tourner sur une multitude de plateformes
étranges, je redéfinis les types prédéfinis (bool, int, float) avec
éventuellement suivant des plateformes des cast affreux (typedef float
myInt) pour contourner les multiples bugs des plateformes/compilateurs
(machines 64 bits avec entiers 32 bits, machines avec entiers 16 bits,
etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux qu'en
machine myInt = myFloat mais syntaxiquement myInt != myFloat ?
(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
Comme mon code C/C++ doit tourner sur une multitude de
plateformes étranges, je redéfinis les types prédéfinis (bool,
int, float) avec éventuellement suivant des plateformes des
cast affreux (typedef float myInt) pour contourner les
multiples bugs des plateformes/compilateurs (machines 64 bits
avec entiers 32 bits, machines avec entiers 16 bits, etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux
qu'en machine myInt = myFloat mais syntaxiquement myInt !=
myFloat ?
Comme mon code C/C++ doit tourner sur une multitude de
plateformes étranges, je redéfinis les types prédéfinis (bool,
int, float) avec éventuellement suivant des plateformes des
cast affreux (typedef float myInt) pour contourner les
multiples bugs des plateformes/compilateurs (machines 64 bits
avec entiers 32 bits, machines avec entiers 16 bits, etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux
qu'en machine myInt = myFloat mais syntaxiquement myInt !=
myFloat ?
Comme mon code C/C++ doit tourner sur une multitude de
plateformes étranges, je redéfinis les types prédéfinis (bool,
int, float) avec éventuellement suivant des plateformes des
cast affreux (typedef float myInt) pour contourner les
multiples bugs des plateformes/compilateurs (machines 64 bits
avec entiers 32 bits, machines avec entiers 16 bits, etc.)
Mais du coup le système de types est totalement perdu dans la
spécialisation des templates :
template <typename T> class Array {...} // tableau de pointeurs sur des
objets
// optimisations classiques avec les types natifs "unboxed"
template <> class Array <myBool> {...}
template <> class Array <myInt> {...}
template <> class Array <myFloat> {...}
Oui mais avec myInt = myFloat = float, le compilateur se perd.
Forcément.
Quelqu'un sait comment expliquer au compilateur que je veux
qu'en machine myInt = myFloat mais syntaxiquement myInt !=
myFloat ?
On Tue, 8 Nov 2005 07:57:31 +0000 (UTC), Marc Boyer
:(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
J'ose espérer que non, du moins pas par conversion implicite.
On Tue, 8 Nov 2005 07:57:31 +0000 (UTC), Marc Boyer
<Marc.Boyer@enseeiht.yahoo.fr.invalid>:
(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
J'ose espérer que non, du moins pas par conversion implicite.
On Tue, 8 Nov 2005 07:57:31 +0000 (UTC), Marc Boyer
:(avec le
pb à gérer de savoir si tu veux pouvoir convertir myInt en
myFloat ou pas).
J'ose espérer que non, du moins pas par conversion implicite.
Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
J'ose espérer que non, du moins pas par conversion implicite.
J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Pourquoi des pointeurs ?
On ne « boxe » pas les types en C++ [...] deux très bien.
En fait, je n'arrive pas à imaginer quel contexte
peut ammener à faire un
typedef float myInt;
donc ensuite, savoir si les conversions myInt <-> myFloat
implicites sont désirables ou pas dans ce contexte, je
n'en ait aucune idée.
Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
J'ose espérer que non, du moins pas par conversion implicite.
J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Pourquoi des pointeurs ?
On ne « boxe » pas les types en C++ [...] deux très bien.
En fait, je n'arrive pas à imaginer quel contexte
peut ammener à faire un
typedef float myInt;
donc ensuite, savoir si les conversions myInt <-> myFloat
implicites sont désirables ou pas dans ce contexte, je
n'en ait aucune idée.
Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
J'ose espérer que non, du moins pas par conversion implicite.
J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Pourquoi des pointeurs ?
On ne « boxe » pas les types en C++ [...] deux très bien.
En fait, je n'arrive pas à imaginer quel contexte
peut ammener à faire un
typedef float myInt;
donc ensuite, savoir si les conversions myInt <-> myFloat
implicites sont désirables ou pas dans ce contexte, je
n'en ait aucune idée.
Bonjour,
Je réponds aux diverses questions
[Marc Boyer ]Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois de
tableaux d'entiers, de flottants et de booléens. Avec des ensembles
c'est plus parlant, j'ai à la fois besoin d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float, alors le template ne sait pas
comment spécialiser set<int> car il y a syntaxiquement deux
implémentations candidates (patricia trees et avl). Mais
sémantiquement il n'y en a qu'une : on veut "patricia" qui exploite le
fait que les données sont entières (et donne en retour plein de
propriétés sympathiques) et non pas avl.
[Fabien Le Lez]J'ose espérer que non, du moins pas par conversion implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque type de
base, un peu comme dans C#) me semble la plus proche de ce qu'il me
faut. Je crains juste que la classe enveloppe (wrapper) ne disparaisse
pas à la compilation et que j'encoure un ralentissement systématique
sur tous les types de base. Ce qui risque d'être problématique étant
donné leur large utilisation.
Bonjour,
Je réponds aux diverses questions
[Marc Boyer ]
Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois de
tableaux d'entiers, de flottants et de booléens. Avec des ensembles
c'est plus parlant, j'ai à la fois besoin d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float, alors le template ne sait pas
comment spécialiser set<int> car il y a syntaxiquement deux
implémentations candidates (patricia trees et avl). Mais
sémantiquement il n'y en a qu'une : on veut "patricia" qui exploite le
fait que les données sont entières (et donne en retour plein de
propriétés sympathiques) et non pas avl.
[Fabien Le Lez]
J'ose espérer que non, du moins pas par conversion implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque type de
base, un peu comme dans C#) me semble la plus proche de ce qu'il me
faut. Je crains juste que la classe enveloppe (wrapper) ne disparaisse
pas à la compilation et que j'encoure un ralentissement systématique
sur tous les types de base. Ce qui risque d'être problématique étant
donné leur large utilisation.
Bonjour,
Je réponds aux diverses questions
[Marc Boyer ]Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois de
tableaux d'entiers, de flottants et de booléens. Avec des ensembles
c'est plus parlant, j'ai à la fois besoin d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float, alors le template ne sait pas
comment spécialiser set<int> car il y a syntaxiquement deux
implémentations candidates (patricia trees et avl). Mais
sémantiquement il n'y en a qu'une : on veut "patricia" qui exploite le
fait que les données sont entières (et donne en retour plein de
propriétés sympathiques) et non pas avl.
[Fabien Le Lez]J'ose espérer que non, du moins pas par conversion implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque type de
base, un peu comme dans C#) me semble la plus proche de ce qu'il me
faut. Je crains juste que la classe enveloppe (wrapper) ne disparaisse
pas à la compilation et que j'encoure un ralentissement systématique
sur tous les types de base. Ce qui risque d'être problématique étant
donné leur large utilisation.
et que j'encoure un ralentissement systématique
sur tous les types de base.
et que j'encoure un ralentissement systématique
sur tous les types de base.
et que j'encoure un ralentissement systématique
sur tous les types de base.
Je réponds aux diverses questions
[Marc Boyer ]Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois
de tableaux d'entiers, de flottants et de booléens. Avec des
ensembles c'est plus parlant, j'ai à la fois besoin
d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les
entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float,
alors le template ne sait pas comment spécialiser set<int> car
il y a syntaxiquement deux implémentations candidates
(patricia trees et avl).
Mais sémantiquement il n'y en a qu'une : on veut "patricia"
qui exploite le fait que les données sont entières (et donne
en retour plein de propriétés sympathiques) et non pas avl.
[Fabien Le Lez]J'ose espérer que non, du moins pas par conversion
implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque
type de base, un peu comme dans C#) me semble la plus proche
de ce qu'il me faut. Je crains juste que la classe enveloppe
(wrapper) ne disparaisse pas à la compilation et que j'encoure
un ralentissement systématique sur tous les types de base. Ce
qui risque d'être problématique étant donné leur large
utilisation.
[kanze]J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Mais toutes les machines ne sont pas raisonnables !
Pourquoi des pointeurs ?
Tableau de pointeurs sur des objets, implémentation classique.
On ne « boxe » pas les types en C++ [...] deux très bien.
Et optimisation classique pour les objets de type prédéfini.
[Marc Boyer]En fait, je n'arrive pas à imaginer quel contexte peut
ammener à faire un typedef float myInt; donc ensuite, savoir
si les conversions myInt <-> myFloat implicites sont
désirables ou pas dans ce contexte, je n'en ait aucune idée.
Quand le type entier est pourri, on calcule en entiers sur les
flottants (ou sur n'importe quoi qui ait une
taille/comportement raisonnable).
Au fait, j'utilise flottant au sens large (nombre à virgule
flottante) et non pas float par opposition à double ou long
double.
Je réponds aux diverses questions
[Marc Boyer ]
Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois
de tableaux d'entiers, de flottants et de booléens. Avec des
ensembles c'est plus parlant, j'ai à la fois besoin
d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les
entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float,
alors le template ne sait pas comment spécialiser set<int> car
il y a syntaxiquement deux implémentations candidates
(patricia trees et avl).
Mais sémantiquement il n'y en a qu'une : on veut "patricia"
qui exploite le fait que les données sont entières (et donne
en retour plein de propriétés sympathiques) et non pas avl.
[Fabien Le Lez]
J'ose espérer que non, du moins pas par conversion
implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque
type de base, un peu comme dans C#) me semble la plus proche
de ce qu'il me faut. Je crains juste que la classe enveloppe
(wrapper) ne disparaisse pas à la compilation et que j'encoure
un ralentissement systématique sur tous les types de base. Ce
qui risque d'être problématique étant donné leur large
utilisation.
[kanze]
J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Mais toutes les machines ne sont pas raisonnables !
Pourquoi des pointeurs ?
Tableau de pointeurs sur des objets, implémentation classique.
On ne « boxe » pas les types en C++ [...] deux très bien.
Et optimisation classique pour les objets de type prédéfini.
[Marc Boyer]
En fait, je n'arrive pas à imaginer quel contexte peut
ammener à faire un typedef float myInt; donc ensuite, savoir
si les conversions myInt <-> myFloat implicites sont
désirables ou pas dans ce contexte, je n'en ait aucune idée.
Quand le type entier est pourri, on calcule en entiers sur les
flottants (ou sur n'importe quoi qui ait une
taille/comportement raisonnable).
Au fait, j'utilise flottant au sens large (nombre à virgule
flottante) et non pas float par opposition à double ou long
double.
Je réponds aux diverses questions
[Marc Boyer ]Une autre, ce serait simplement de jouer avec le préprocesseur.
#if !(MYFLOAT_ID == MYINT_ID && defined(ARRAY_INT)
template <> class Array <myFloat> {...}
#endif
Je n'ai pas très bien compris, je vais avoir besoin à la fois
de tableaux d'entiers, de flottants et de booléens. Avec des
ensembles c'est plus parlant, j'ai à la fois besoin
d'ensembles de :
- entiers (arbre de recherche "patricia" spécialisé pour les
entiers)
- flottants (arbre de recherche binaire sans indirection)
- objets pointés (arbre de recherche binaire avec indirection)
Le problème c'est que si int = float,
alors le template ne sait pas comment spécialiser set<int> car
il y a syntaxiquement deux implémentations candidates
(patricia trees et avl).
Mais sémantiquement il n'y en a qu'une : on veut "patricia"
qui exploite le fait que les données sont entières (et donne
en retour plein de propriétés sympathiques) et non pas avl.
[Fabien Le Lez]J'ose espérer que non, du moins pas par conversion
implicite.
Non, jamais.
Votre méthode (utilisation de classes spéciales pour chaque
type de base, un peu comme dans C#) me semble la plus proche
de ce qu'il me faut. Je crains juste que la classe enveloppe
(wrapper) ne disparaisse pas à la compilation et que j'encoure
un ralentissement systématique sur tous les types de base. Ce
qui risque d'être problématique étant donné leur large
utilisation.
[kanze]J'avoue ne pas en comprendre l'intérêt. Les bogues de
compilateur qui concerne les types de base sont assez rare. (Et
un typedef n'est pas un cast.)
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Mais toutes les machines ne sont pas raisonnables !
Pourquoi des pointeurs ?
Tableau de pointeurs sur des objets, implémentation classique.
On ne « boxe » pas les types en C++ [...] deux très bien.
Et optimisation classique pour les objets de type prédéfini.
[Marc Boyer]En fait, je n'arrive pas à imaginer quel contexte peut
ammener à faire un typedef float myInt; donc ensuite, savoir
si les conversions myInt <-> myFloat implicites sont
désirables ou pas dans ce contexte, je n'en ait aucune idée.
Quand le type entier est pourri, on calcule en entiers sur les
flottants (ou sur n'importe quoi qui ait une
taille/comportement raisonnable).
Au fait, j'utilise flottant au sens large (nombre à virgule
flottante) et non pas float par opposition à double ou long
double.
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Tu as une drôle d'idée de « raisonable ». Je n'ai jamais encore
vu une machine comme ça ;
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Tu as une drôle d'idée de « raisonable ». Je n'ai jamais encore
vu une machine comme ça ;
Sur une machine raisonnable on a :
Table of the numbers of bytes used for different data type
char : 1
int : 4
long int : 4
float : 4
double : 8
long double : 12
Tu as une drôle d'idée de « raisonable ». Je n'ai jamais encore
vu une machine comme ça ;