Oups, il semble que le message précédent soit parti trop vite...
J'ai un code dont le but est de mapper un type de base avec un type préd
éfini (pour faire de l'échange réseau binaire entre machines non homogèn
es). Il ressemble à ça :
template <typename T> struct NetworkType
{
};
Le code marche assez bien, sauf que quand je veux spécialiser le templat
e pour size_t, par exemple, j'ai un problème, puisque size_t est un type
def, et non un type à part entière.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec
un int32), et sur une autre un long qui serait mappé avec un int64, alo
rs que je souhaite que size_t soit mappé sur un type unique.
Y a-t-il une solution à mon problème ?
--
Loïc
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Article poste via Voila News - http://www.news.voila.fr
Le : Wed Oct 8 17:11:46 2003 depuis l'IP : clara2.renault.fr [VIP 8630229]
| Oups, il semble que le message précédent soit parti trop vite... | | J'ai un code dont le but est de mapper un type de base avec un type préd | éfini (pour faire de l'échange réseau binaire entre machines non homogèn | es). Il ressemble à ça : | template <typename T> struct NetworkType | { | }; | | template<> struct NetworkType<int> | { | typedef int32 type; | }; | | Le code marche assez bien, sauf que quand je veux spécialiser le templat | e pour size_t, par exemple, j'ai un problème, puisque size_t est un type | def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec | un int32), et sur une autre un long qui serait mappé avec un int64, alo | rs que je souhaite que size_t soit mappé sur un type unique. | | Y a-t-il une solution à mon problème ?
Ne l'utilise pas.
-- Gaby
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
| Oups, il semble que le message précédent soit parti trop vite...
|
| J'ai un code dont le but est de mapper un type de base avec un type préd
| éfini (pour faire de l'échange réseau binaire entre machines non homogèn
| es). Il ressemble à ça :
| template <typename T> struct NetworkType
| {
| };
|
| template<> struct NetworkType<int>
| {
| typedef int32 type;
| };
|
| Le code marche assez bien, sauf que quand je veux spécialiser le templat
| e pour size_t, par exemple, j'ai un problème, puisque size_t est un type
| def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec
| un int32), et sur une autre un long qui serait mappé avec un int64, alo
| rs que je souhaite que size_t soit mappé sur un type unique.
|
| Y a-t-il une solution à mon problème ?
| Oups, il semble que le message précédent soit parti trop vite... | | J'ai un code dont le but est de mapper un type de base avec un type préd | éfini (pour faire de l'échange réseau binaire entre machines non homogèn | es). Il ressemble à ça : | template <typename T> struct NetworkType | { | }; | | template<> struct NetworkType<int> | { | typedef int32 type; | }; | | Le code marche assez bien, sauf que quand je veux spécialiser le templat | e pour size_t, par exemple, j'ai un problème, puisque size_t est un type | def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec | un int32), et sur une autre un long qui serait mappé avec un int64, alo | rs que je souhaite que size_t soit mappé sur un type unique. | | Y a-t-il une solution à mon problème ?
Ne l'utilise pas.
-- Gaby
Loïc Joly
Gabriel Dos Reis wrote:
Loïc Joly writes:
| Oups, il semble que le message précédent soit parti trop vite... | | J'ai un code dont le but est de mapper un type de base avec un type préd | éfini (pour faire de l'échange réseau binaire entre machines non homogèn | es). Il ressemble à ça : | template <typename T> struct NetworkType | { | }; | | template<> struct NetworkType<int> | { | typedef int32 type; | }; | | Le code marche assez bien, sauf que quand je veux spécialiser le templat | e pour size_t, par exemple, j'ai un problème, puisque size_t est un type | def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec | un int32), et sur une autre un long qui serait mappé avec un int64, alo | rs que je souhaite que size_t soit mappé sur un type unique. | | Y a-t-il une solution à mon problème ?
Ne l'utilise pas.
Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de ne pas utiliser : Mon template ou bien size_t ?
S'il s'agit de size_t, je peux toujours documenter pour mes utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses fonction de la STL qui retournent un size_type qui a en général le même problème (je me demande d'ailleurs si une implémentation aurait le droit de définir une classe ayant un comportement d'entier comme size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de la lecture du standard).
-- Loïc
Gabriel Dos Reis wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
| Oups, il semble que le message précédent soit parti trop vite...
|
| J'ai un code dont le but est de mapper un type de base avec un type préd
| éfini (pour faire de l'échange réseau binaire entre machines non homogèn
| es). Il ressemble à ça :
| template <typename T> struct NetworkType
| {
| };
|
| template<> struct NetworkType<int>
| {
| typedef int32 type;
| };
|
| Le code marche assez bien, sauf que quand je veux spécialiser le templat
| e pour size_t, par exemple, j'ai un problème, puisque size_t est un type
| def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec
| un int32), et sur une autre un long qui serait mappé avec un int64, alo
| rs que je souhaite que size_t soit mappé sur un type unique.
|
| Y a-t-il une solution à mon problème ?
Ne l'utilise pas.
Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de
ne pas utiliser : Mon template ou bien size_t ?
S'il s'agit de size_t, je peux toujours documenter pour mes
utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses
fonction de la STL qui retournent un size_type qui a en général le même
problème (je me demande d'ailleurs si une implémentation aurait le droit
de définir une classe ayant un comportement d'entier comme size_type. Je
n'ai pas l'impression, mais je ne suis pas un pro de la lecture du
standard).
| Oups, il semble que le message précédent soit parti trop vite... | | J'ai un code dont le but est de mapper un type de base avec un type préd | éfini (pour faire de l'échange réseau binaire entre machines non homogèn | es). Il ressemble à ça : | template <typename T> struct NetworkType | { | }; | | template<> struct NetworkType<int> | { | typedef int32 type; | }; | | Le code marche assez bien, sauf que quand je veux spécialiser le templat | e pour size_t, par exemple, j'ai un problème, puisque size_t est un type | def, et non un type à part entière.
petite précision : un size_t est toujours non signé.
| Et il se peut que sur une machine size_t soit un int (et donc mappé avec | un int32), et sur une autre un long qui serait mappé avec un int64, alo | rs que je souhaite que size_t soit mappé sur un type unique. | | Y a-t-il une solution à mon problème ?
Ne l'utilise pas.
Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de ne pas utiliser : Mon template ou bien size_t ?
S'il s'agit de size_t, je peux toujours documenter pour mes utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses fonction de la STL qui retournent un size_type qui a en général le même problème (je me demande d'ailleurs si une implémentation aurait le droit de définir une classe ayant un comportement d'entier comme size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de la lecture du standard).
-- Loïc
Gabriel Dos Reis
Loïc Joly writes:
[...]
| > | Et il se peut que sur une machine size_t soit un int (et donc mappé avec | > | un int32), et sur une autre un long qui serait mappé avec un int64, alo | > | rs que je souhaite que size_t soit mappé sur un type unique. | > | | > | Y a-t-il une solution à mon problème ? | > | > Ne l'utilise pas. | | Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de | ne pas utiliser : Mon template ou bien size_t ?
size_t -- puisque c'est ça qui pose problème.
| S'il s'agit de size_t, je peux toujours documenter pour mes | utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses
le point est qu'en général il n'est pas très recommandé d'inclure size_t (ou n'importe quel typedef) dans l'ensemble des types sur lesquels on surcharge -- on risque d'avoir des emmerdements.
| fonction de la STL qui retournent un size_type qui a en général le même | problème
mais si size_type correpond à ton uint32_t, alors c'est bon; sinon il sera rejeté. Ou j'ai manqué quelque chose ?
| (je me demande d'ailleurs si une implémentation aurait le droit | de définir une classe ayant un comportement d'entier comme size_type. Je | n'ai pas l'impression, mais je ne suis pas un pro de la lecture du | standard).
certains ont argué que si.
-- Gaby
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
[...]
| > | Et il se peut que sur une machine size_t soit un int (et donc mappé avec
| > | un int32), et sur une autre un long qui serait mappé avec un int64, alo
| > | rs que je souhaite que size_t soit mappé sur un type unique.
| > |
| > | Y a-t-il une solution à mon problème ?
| >
| > Ne l'utilise pas.
|
| Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de
| ne pas utiliser : Mon template ou bien size_t ?
size_t -- puisque c'est ça qui pose problème.
| S'il s'agit de size_t, je peux toujours documenter pour mes
| utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses
le point est qu'en général il n'est pas très recommandé d'inclure
size_t (ou n'importe quel typedef) dans l'ensemble des types sur
lesquels on surcharge -- on risque d'avoir des emmerdements.
| fonction de la STL qui retournent un size_type qui a en général le même
| problème
mais si size_type correpond à ton uint32_t, alors c'est bon; sinon il
sera rejeté. Ou j'ai manqué quelque chose ?
| (je me demande d'ailleurs si une implémentation aurait le droit
| de définir une classe ayant un comportement d'entier comme size_type. Je
| n'ai pas l'impression, mais je ne suis pas un pro de la lecture du
| standard).
| > | Et il se peut que sur une machine size_t soit un int (et donc mappé avec | > | un int32), et sur une autre un long qui serait mappé avec un int64, alo | > | rs que je souhaite que size_t soit mappé sur un type unique. | > | | > | Y a-t-il une solution à mon problème ? | > | > Ne l'utilise pas. | | Je ne suis pas sur d'avoir compris : Qu'est-ce que tu me conseilles de | ne pas utiliser : Mon template ou bien size_t ?
size_t -- puisque c'est ça qui pose problème.
| S'il s'agit de size_t, je peux toujours documenter pour mes | utilisateurs, mais le risque existe qu'ils utilisent une des nombreuses
le point est qu'en général il n'est pas très recommandé d'inclure size_t (ou n'importe quel typedef) dans l'ensemble des types sur lesquels on surcharge -- on risque d'avoir des emmerdements.
| fonction de la STL qui retournent un size_type qui a en général le même | problème
mais si size_type correpond à ton uint32_t, alors c'est bon; sinon il sera rejeté. Ou j'ai manqué quelque chose ?
| (je me demande d'ailleurs si une implémentation aurait le droit | de définir une classe ayant un comportement d'entier comme size_type. Je | n'ai pas l'impression, mais je ne suis pas un pro de la lecture du | standard).
certains ont argué que si.
-- Gaby
kanze
Gabriel Dos Reis wrote in message news:...
| (je me demande d'ailleurs si une implémentation aurait le droit de | définir une classe ayant un comportement d'entier comme | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C pour la définition de size_t. C90, malheureusement, et moi, je n'ai que C99 ici. (Et en ce qui concerne les types entiers, la définition en a bien changé entre les deux.) Mais d'après mes souvenirs...
Enfin, la norme dit que size_t doit être un « unsigned integer type ». (Ça n'a pas changé.) L'expression « unsigned integer type » est défini §6.2.5. D'après mes souvenirs, dans C90, par énumération de tous les types inclus : unsigned char, unsigned short, unsigned int et unsigned long. C99 ajoute évidemment unsigned long long, mais aussi des « extended integer types ». Et dans C99, size_t peut bien être un « extended integer type ».
Alors, est-ce que mes souvenirs de C90 sont faux ? Ou est-ce qu'il y a quelque chose que je n'ai pas vu, ou qui m'a échappé dans l'analyse ?
(Et en passant, les « extended integer types » ne vont pas faciliter la vie de celui qui veut prévoyer les surcharges, si jamais on les adopte.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> wrote in message
news:<flismzxqd4.fsf@sel.cmla.ens-cachan.fr>...
| (je me demande d'ailleurs si une implémentation aurait le droit de
| définir une classe ayant un comportement d'entier comme
| size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de
| la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C
pour la définition de size_t. C90, malheureusement, et moi, je n'ai que
C99 ici. (Et en ce qui concerne les types entiers, la définition en a
bien changé entre les deux.) Mais d'après mes souvenirs...
Enfin, la norme dit que size_t doit être un « unsigned integer
type ». (Ça n'a pas changé.) L'expression « unsigned integer type » est
défini §6.2.5. D'après mes souvenirs, dans C90, par énumération de tous
les types inclus : unsigned char, unsigned short, unsigned int et
unsigned long. C99 ajoute évidemment unsigned long long, mais aussi des
« extended integer types ». Et dans C99, size_t peut bien être un
« extended integer type ».
Alors, est-ce que mes souvenirs de C90 sont faux ? Ou est-ce qu'il y a
quelque chose que je n'ai pas vu, ou qui m'a échappé dans l'analyse ?
(Et en passant, les « extended integer types » ne vont pas faciliter la
vie de celui qui veut prévoyer les surcharges, si jamais on les adopte.)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
| (je me demande d'ailleurs si une implémentation aurait le droit de | définir une classe ayant un comportement d'entier comme | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C pour la définition de size_t. C90, malheureusement, et moi, je n'ai que C99 ici. (Et en ce qui concerne les types entiers, la définition en a bien changé entre les deux.) Mais d'après mes souvenirs...
Enfin, la norme dit que size_t doit être un « unsigned integer type ». (Ça n'a pas changé.) L'expression « unsigned integer type » est défini §6.2.5. D'après mes souvenirs, dans C90, par énumération de tous les types inclus : unsigned char, unsigned short, unsigned int et unsigned long. C99 ajoute évidemment unsigned long long, mais aussi des « extended integer types ». Et dans C99, size_t peut bien être un « extended integer type ».
Alors, est-ce que mes souvenirs de C90 sont faux ? Ou est-ce qu'il y a quelque chose que je n'ai pas vu, ou qui m'a échappé dans l'analyse ?
(Et en passant, les « extended integer types » ne vont pas faciliter la vie de celui qui veut prévoyer les surcharges, si jamais on les adopte.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze
Loïc Joly wrote in message news:<bm19fj$vlc$...
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type entier, il faut aussi le surcharger sur int, afin d'éviter des ambigüités dans des cas comme f(0). Il y aurait peut-être une règle semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de conversions implicites dans la résolution de la spécialisation, il faudrait spécialiser pour tous les types entiers.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
news:<bm19fj$vlc$1@news.x-echo.com>...
J'ai un code dont le but est de mapper un type de base avec un type
préd éfini (pour faire de l'échange réseau binaire entre machines non
homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le
templat e pour size_t, par exemple, j'ai un problème, puisque size_t
est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé
avec un int32), et sur une autre un long qui serait mappé avec un
int64, alo rs que je souhaite que size_t soit mappé sur un type
unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type
entier, il faut aussi le surcharger sur int, afin d'éviter des
ambigüités dans des cas comme f(0). Il y aurait peut-être une règle
semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de
conversions implicites dans la résolution de la spécialisation, il
faudrait spécialiser pour tous les types entiers.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type entier, il faut aussi le surcharger sur int, afin d'éviter des ambigüités dans des cas comme f(0). Il y aurait peut-être une règle semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de conversions implicites dans la résolution de la spécialisation, il faudrait spécialiser pour tous les types entiers.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Jean-Marc Bourguet
writes:
Gabriel Dos Reis wrote in message news:...
| (je me demande d'ailleurs si une implémentation aurait le droit de | définir une classe ayant un comportement d'entier comme | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ?
Je crois qu'il est question des size_type membres des conteneurs de la bibliotheque standard.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
kanze@gabi-soft.fr writes:
Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> wrote in message
news:<flismzxqd4.fsf@sel.cmla.ens-cachan.fr>...
| (je me demande d'ailleurs si une implémentation aurait le droit de
| définir une classe ayant un comportement d'entier comme
| size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de
| la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ?
Je crois qu'il est question des size_type membres des conteneurs de la
bibliotheque standard.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
| (je me demande d'ailleurs si une implémentation aurait le droit de | définir une classe ayant un comportement d'entier comme | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | la lecture du standard).
certains ont argué que si.
Je suis curieux. Sur quelle base ?
Je crois qu'il est question des size_type membres des conteneurs de la bibliotheque standard.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Marc Boyer
In article <bm19fj$vlc$, Loïc Joly wrote:
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça : template <typename T> struct NetworkType { };
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Si ton size_t est "mappé avec un int64", comment feras-tu pour encoder une valeur > 2^32 ?
Y a-t-il une solution à mon problème ?
J'ai peur que le problème soit mal posé, malheureusement. Pour faire communiquer des machines non-homogènes, tu dois définir des types abstraits, avec un encodage fixe, les opérations qui sont permises dessus, les plages de valeur, et les conversions faites pour les machines réelles. Non ?
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
In article <bm19fj$vlc$1@news.x-echo.com>, Loïc Joly wrote:
J'ai un code dont le but est de mapper un type de base avec un type préd
éfini (pour faire de l'échange réseau binaire entre machines non homogèn
es). Il ressemble à ça :
template <typename T> struct NetworkType
{
};
Le code marche assez bien, sauf que quand je veux spécialiser le templat
e pour size_t, par exemple, j'ai un problème, puisque size_t est un type
def, et non un type à part entière.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec
un int32), et sur une autre un long qui serait mappé avec un int64, alo
rs que je souhaite que size_t soit mappé sur un type unique.
Si ton size_t est "mappé avec un int64", comment feras-tu pour encoder
une valeur > 2^32 ?
Y a-t-il une solution à mon problème ?
J'ai peur que le problème soit mal posé, malheureusement.
Pour faire communiquer des machines non-homogènes, tu dois
définir des types abstraits, avec un encodage fixe, les
opérations qui sont permises dessus, les plages de valeur, et
les conversions faites pour les machines réelles.
Non ?
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça : template <typename T> struct NetworkType { };
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Si ton size_t est "mappé avec un int64", comment feras-tu pour encoder une valeur > 2^32 ?
Y a-t-il une solution à mon problème ?
J'ai peur que le problème soit mal posé, malheureusement. Pour faire communiquer des machines non-homogènes, tu dois définir des types abstraits, avec un encodage fixe, les opérations qui sont permises dessus, les plages de valeur, et les conversions faites pour les machines réelles. Non ?
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Gabriel Dos Reis
writes:
| Gabriel Dos Reis wrote in message | news:... | | > | (je me demande d'ailleurs si une implémentation aurait le droit de | > | définir une classe ayant un comportement d'entier comme | > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | > | la lecture du standard). | | > certains ont argué que si. | | Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C | pour la définition de size_t. C90, malheureusement, et moi, je n'ai que | C99 ici. (Et en ce qui concerne les types entiers, la définition en a | bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
-- Gaby
kanze@gabi-soft.fr writes:
| Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> wrote in message
| news:<flismzxqd4.fsf@sel.cmla.ens-cachan.fr>...
|
| > | (je me demande d'ailleurs si une implémentation aurait le droit de
| > | définir une classe ayant un comportement d'entier comme
| > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de
| > | la lecture du standard).
|
| > certains ont argué que si.
|
| Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C
| pour la définition de size_t. C90, malheureusement, et moi, je n'ai que
| C99 ici. (Et en ce qui concerne les types entiers, la définition en a
| bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
| Gabriel Dos Reis wrote in message | news:... | | > | (je me demande d'ailleurs si une implémentation aurait le droit de | > | définir une classe ayant un comportement d'entier comme | > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro de | > | la lecture du standard). | | > certains ont argué que si. | | Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C | pour la définition de size_t. C90, malheureusement, et moi, je n'ai que | C99 ici. (Et en ce qui concerne les types entiers, la définition en a | bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
-- Gaby
kanze
Loïc Joly wrote in message news:<bm19fj$vlc$...
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type entier, il faut aussi le surcharger sur int, afin d'éviter des ambigüités dans des cas comme f(0). Il y aurait peut-être une règle semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de conversions implicites dans la résolution de la spécialisation, il faudrait spécialiser pour tous les types entiers.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
news:<bm19fj$vlc$1@news.x-echo.com>...
J'ai un code dont le but est de mapper un type de base avec un type
préd éfini (pour faire de l'échange réseau binaire entre machines non
homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le
templat e pour size_t, par exemple, j'ai un problème, puisque size_t
est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé
avec un int32), et sur une autre un long qui serait mappé avec un
int64, alo rs que je souhaite que size_t soit mappé sur un type
unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type
entier, il faut aussi le surcharger sur int, afin d'éviter des
ambigüités dans des cas comme f(0). Il y aurait peut-être une règle
semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de
conversions implicites dans la résolution de la spécialisation, il
faudrait spécialiser pour tous les types entiers.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
J'ai un code dont le but est de mapper un type de base avec un type préd éfini (pour faire de l'échange réseau binaire entre machines non homogèn es). Il ressemble à ça :
Le code marche assez bien, sauf que quand je veux spécialiser le templat e pour size_t, par exemple, j'ai un problème, puisque size_t est un type def, et non un type à part entière.
Tu ne peux donc pas surcharger/spécialiser sur size_t.
Et il se peut que sur une machine size_t soit un int (et donc mappé avec un int32), et sur une autre un long qui serait mappé avec un int64, alo rs que je souhaite que size_t soit mappé sur un type unique.
Size_t ne peut être qu'un type non-signé.
Y a-t-il une solution à mon problème ?
Spécialiser pour tous les types entiers ?
Il est bien connu que quand tu surcharges une fonction sur un type entier, il faut aussi le surcharger sur int, afin d'éviter des ambigüités dans des cas comme f(0). Il y aurait peut-être une règle semblable pour la spécialisation -- sauf que vue qu'il n'y a pas de conversions implicites dans la résolution de la spécialisation, il faudrait spécialiser pour tous les types entiers.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze
Gabriel Dos Reis wrote in message news:...
writes:
| Gabriel Dos Reis wrote in message | news:...
| > | (je me demande d'ailleurs si une implémentation aurait le droit | > | de définir une classe ayant un comportement d'entier comme | > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro | > | de la lecture du standard).
| > certains ont argué que si.
| Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C | pour la définition de size_t. C90, malheureusement, et moi, je n'ai | que C99 ici. (Et en ce qui concerne les types entiers, la définition | en a bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
Ooops. Mon erreur, j'ai mal lu.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> wrote in message
news:<fl65iyyipi.fsf@sel.cmla.ens-cachan.fr>...
kanze@gabi-soft.fr writes:
| Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> wrote in message
| news:<flismzxqd4.fsf@sel.cmla.ens-cachan.fr>...
| > | (je me demande d'ailleurs si une implémentation aurait le droit
| > | de définir une classe ayant un comportement d'entier comme
| > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro
| > | de la lecture du standard).
| > certains ont argué que si.
| Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C
| pour la définition de size_t. C90, malheureusement, et moi, je n'ai
| que C99 ici. (Et en ce qui concerne les types entiers, la définition
| en a bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
Ooops. Mon erreur, j'ai mal lu.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
| > | (je me demande d'ailleurs si une implémentation aurait le droit | > | de définir une classe ayant un comportement d'entier comme | > | size_type. Je n'ai pas l'impression, mais je ne suis pas un pro | > | de la lecture du standard).
| > certains ont argué que si.
| Je suis curieux. Sur quelle base ? La norme C++ renvoie à la norme C | pour la définition de size_t. C90, malheureusement, et moi, je n'ai | que C99 ici. (Et en ce qui concerne les types entiers, la définition | en a bien changé entre les deux.) Mais d'après mes souvenirs...
La partie du message auquel tu réponds parle de *size_type*.
Ooops. Mon erreur, j'ai mal lu.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16