Dans mes réflexions sur les langages, j'étais en train de
me dire qu'en C++, les type de base finissent pas être
les parents pauvres du système de type. En fait, je pensais
à la possibilité dans d'autre langage de définir un type
qui "hérite" de int par exemple.
// Pseudo syntaxe
// Les types
type kilo = subtype int;
type longueur = subtype int;
// Declaration
kilo monPoids, ton Poid;
longueur maTaille, taTaille;
// Utilisation
monPoids= 75;
tonPoids= monPoids - 10;
maTaille= 180;
monPoids= maTaille; // Erreur de compilation
monPoids= (int) maTaille; // OK
En fait, on pourrait faire ça en C++ si int était une classe.
Mais ça ne l'est pas...
J'ai une piste de solution. Je sais faire une classe Integer
(graçe à des discussion sur fclc++ d'ailleurs) qui se comporte
quasiment comme un entier. Le seul problème que j'ai, c'est
que pour éviter les ambiguités, je n'offre pas de conversion
implicite vers int (sinon, il ne sait jamais si monPoids+1
est de type int ou kilo), mais juste une fonction "toInt".
Mon principal problème, c'est l'usage des valeurs entières
comme indice de tableau.
Je dois pouvoir ecrire une fonction template qui gère les
tableaux "build-in" avec un truc du genre
template<typename T, int N>
T operator[](T (&array)[N], Integer i){
return (&array)[i.toInt()];
}
On doit pouvoir gérer les std::vector tout pareil, et on couvre
les cas de base.
Mais, si quelqu'un écrit une fonction qui prend un int en paramêtre,
je ne peux pas lui passer un Integer...
Une idée ?
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
Il y a au moins une personne qui essaie d'avoir le temps de rediger une proposition. Quand on definit ainsi un "type derive", le probleme est de savoir quelles sont les operations qui sont heritees (les operations primitives d'Ada) et d'arriver a formuler des regles en restant homogene avec le reste de C++.
Je suppose que c'est donc qu'il a échoué à le faire à l'intérieur du langage tel qu'il est actuellement et que ma recherche est donc vaine.
C'est dans un cadre plus large qui effectivement est impossible a l'interieur du langage existant. Ce qui t'interesse est peut-etre possible, j'ai pas essaye.
Disons que comme c'est surtout à titre d'exercice que je me posais la question, le besoin n'est pas exactement spécifié. J'arrive à faire ce que je veux (C++ est assez riche) en recodant des trucs, et même je peux faire une macro SUBTYPE(KiloPomme, Integer) qui semble opérationnelle. Mais c'est du prototypage, et j'ai la flemme de le faire pour du propre. Disons que c'est mon côté matheu qui ressort: j'ai prouvé qu'il existait une solution, je m'arrête ;-)
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Jean-Marc Bourguet wrote:
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
[SNIP]
Il y a au moins une personne qui essaie d'avoir le temps de rediger
une proposition. Quand on definit ainsi un "type derive", le probleme
est de savoir quelles sont les operations qui sont heritees (les
operations primitives d'Ada) et d'arriver a formuler des regles en
restant homogene avec le reste de C++.
Je suppose que c'est donc qu'il a échoué à le faire à l'intérieur
du langage tel qu'il est actuellement et que ma recherche est donc vaine.
C'est dans un cadre plus large qui effectivement est impossible a
l'interieur du langage existant. Ce qui t'interesse est peut-etre
possible, j'ai pas essaye.
Disons que comme c'est surtout à titre d'exercice que je me
posais la question, le besoin n'est pas exactement spécifié.
J'arrive à faire ce que je veux (C++ est assez riche)
en recodant des trucs, et même je peux faire une macro
SUBTYPE(KiloPomme, Integer) qui semble opérationnelle.
Mais c'est du prototypage, et j'ai la flemme de le
faire pour du propre. Disons que c'est mon côté matheu
qui ressort: j'ai prouvé qu'il existait une solution, je
m'arrête ;-)
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
Il y a au moins une personne qui essaie d'avoir le temps de rediger une proposition. Quand on definit ainsi un "type derive", le probleme est de savoir quelles sont les operations qui sont heritees (les operations primitives d'Ada) et d'arriver a formuler des regles en restant homogene avec le reste de C++.
Je suppose que c'est donc qu'il a échoué à le faire à l'intérieur du langage tel qu'il est actuellement et que ma recherche est donc vaine.
C'est dans un cadre plus large qui effectivement est impossible a l'interieur du langage existant. Ce qui t'interesse est peut-etre possible, j'ai pas essaye.
Disons que comme c'est surtout à titre d'exercice que je me posais la question, le besoin n'est pas exactement spécifié. J'arrive à faire ce que je veux (C++ est assez riche) en recodant des trucs, et même je peux faire une macro SUBTYPE(KiloPomme, Integer) qui semble opérationnelle. Mais c'est du prototypage, et j'ai la flemme de le faire pour du propre. Disons que c'est mon côté matheu qui ressort: j'ai prouvé qu'il existait une solution, je m'arrête ;-)
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Michel Michaud
Dans news:brko74$2jp$, Marc
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait pas dans ce cas. Ca demande juste que l'utilisateur dise explicitement quand il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire ce que tu veux... Si vraiment mettre des conversions explicites partout ne te semble pas un problème.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:brko74$2jp$1@news.cict.fr, Marc
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait
pas dans ce cas.
Ca demande juste que l'utilisateur dise explicitement quand
il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire
ce que tu veux... Si vraiment mettre des conversions explicites
partout ne te semble pas un problème.
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait pas dans ce cas. Ca demande juste que l'utilisateur dise explicitement quand il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire ce que tu veux... Si vraiment mettre des conversions explicites partout ne te semble pas un problème.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Marc Boyer
In article <QTKDb.6001$, Michel Michaud wrote:
Dans news:brko74$2jp$, Marc
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait pas dans ce cas. Ca demande juste que l'utilisateur dise explicitement quand il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire ce que tu veux... Si vraiment mettre des conversions explicites partout ne te semble pas un problème.
Comme je le disais à Jean-Marc Bourguet, j'arrive à le faire "à la main", ou avec l'aide du préprocesseur. J'aurais bien aimé trouver une statégie qui permette de déclarer un sous-type de Integer en moins de 80 charactères, sans préprocesseur.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
In article <QTKDb.6001$CK3.409443@news20.bellglobal.com>, Michel Michaud wrote:
Dans news:brko74$2jp$1@news.cict.fr, Marc
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait
pas dans ce cas.
Ca demande juste que l'utilisateur dise explicitement quand
il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire
ce que tu veux... Si vraiment mettre des conversions explicites
partout ne te semble pas un problème.
Comme je le disais à Jean-Marc Bourguet, j'arrive à le faire
"à la main", ou avec l'aide du préprocesseur.
J'aurais bien aimé trouver une statégie qui permette
de déclarer un sous-type de Integer en moins de 80
charactères, sans préprocesseur.
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
En C++, on a plein de cast, je vois pas pourquoi on les utiliserait pas dans ce cas. Ca demande juste que l'utilisateur dise explicitement quand il veut faire des conversions.
Dans ce cas, il me semble qu'il y a certainement moyen de faire ce que tu veux... Si vraiment mettre des conversions explicites partout ne te semble pas un problème.
Comme je le disais à Jean-Marc Bourguet, j'arrive à le faire "à la main", ou avec l'aide du préprocesseur. J'aurais bien aimé trouver une statégie qui permette de déclarer un sous-type de Integer en moins de 80 charactères, sans préprocesseur.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(