OVH Cloud OVH Cloud

Limitation de typage pour les templates

7 réponses
Avatar
Dominique Vaufreydaz
Bonjour,

Je m'excuse si cette question est recurrente... J'ai pas trouve la reponse
alors je m'adresse a vous...

Bon j'ai une classe template avec comme parametre le type de ce
qu'elle gere... Rien que de bien normale me direz vous... Par contre,
la classe ne fonctionnera pas pour tous les types et je voudrais savoir
s'il etait possible de limiter l'usage de cette classe a certains type/classe
en l'indiquant en declaration ??

Juste pour pas avoir 2000 lignes d'erreurs alors que le probleme
vient du type qui n'est pas compatible avec les operations effectues
type un log sur une string...

Merci. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/

7 réponses

Avatar
Jonathan Mcdougall
Bon j'ai une classe template avec comme parametre le type de ce
qu'elle gere... Rien que de bien normale me direz vous... Par contre,
la classe ne fonctionnera pas pour tous les types et je voudrais
savoir

s'il etait possible de limiter l'usage de cette classe a certains
type/classe

en l'indiquant en declaration ??

Juste pour pas avoir 2000 lignes d'erreurs alors que le probleme
vient du type qui n'est pas compatible avec les operations effectues
type un log sur une string...


Il n'y a pas de façon built-in pour faire ça, il va te falloir utiliser des
moyens détournés. Si tu ne peux pas donner plus de détails, procure toi
le livre Modern C++ Design par Andrei Alexandrescu.


Jonathan

Avatar
Patrick Mézard
"Dominique Vaufreydaz" a écrit dans le
message de news:blh0kd$2sr$
Bonjour,

Je m'excuse si cette question est recurrente... J'ai pas trouve la
reponse

alors je m'adresse a vous...

Bon j'ai une classe template avec comme parametre le type de ce
qu'elle gere... Rien que de bien normale me direz vous... Par contre,
la classe ne fonctionnera pas pour tous les types et je voudrais
savoir

s'il etait possible de limiter l'usage de cette classe a certains
type/classe

en l'indiquant en declaration ??



Tu peux regarder du coté des "type traits" de boost :
http://www.boost.org/libs/type_traits/index.htm

Sinon la bibliothèque "Loki" dont le bouquin cité plus haut ("Modern C++
Design" d'Alexandrescu) détaille les principaux concepts doit contenir ce
genre de choses mais ça risque d'être plus coton à compiler que les
templates de Boost (mais peut-être aussi plus puissant).

Patrick Mézard

Avatar
Dominique Vaufreydaz
Rebonjour,

Il n'y a pas de façon built-in pour faire ça, il va te falloir utiliser des


Bon ben je laisse comme ca alors... C'etait juste pour etre sur que mon
apprentissage du C++ n'avait pas oublie ce point,

moyens détournés. Si tu ne peux pas donner plus de détails, procure toi
le livre Modern C++ Design par Andrei Alexandrescu.


Si, je peux. C'est une classe qui fait du traitement du signal. Ca marche
soit avec des float, soit avec des double. L'idee c'est que si on mets string,
on a moulte erreur a la compilation et que j'aurais jsute aime avoir
1 erreur du genre : mauvaise instanciation de template.

Bon, ben c'est pas grave, c'etait juste pour essayer de faire du code propre ;-D

Merci de vos lumieres. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/

Avatar
Marc Boyer
Dominique Vaufreydaz wrote:
moyens détournés. Si tu ne peux pas donner plus de détails, procure toi
le livre Modern C++ Design par Andrei Alexandrescu.


Si, je peux. C'est une classe qui fait du traitement du signal. Ca marche
soit avec des float, soit avec des double. L'idee c'est que si on mets string,
on a moulte erreur a la compilation et que j'aurais jsute aime avoir
1 erreur du genre : mauvaise instanciation de template.


Ca, c'est un peu plus facile que le cas général, puisque
tu peux t'appuyer sur numeric_limits.
Globalement, on peut imaginer que ta classe pourra prendre
en paramêtre un type T tel que
numeric_limits<T>::is_specialized && !numeric_limits<T>::is_integer

Ainsi, si quelqu'un fait une classe qui se comporte comme
un float ou un double, ou veut utiliser une spécificité de
sa plateforme (un long double ou short float), comme
numeric_limits aura été spécialisé, tout marchera bien.

Reste ensuite à faire un "compilation assert". La
bibliothèque Loki propose une solution.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Dominique Vaufreydaz
Bonjour,

Ca, c'est un peu plus facile que le cas général, puisque
tu peux t'appuyer sur numeric_limits.
Globalement, on peut imaginer que ta classe pourra prendre
en paramêtre un type T tel que
numeric_limits<T>::is_specialized && !numeric_limits<T>::is_integer
Ainsi, si quelqu'un fait une classe qui se comporte comme
un float ou un double, ou veut utiliser une spécificité de
sa plateforme (un long double ou short float), comme
numeric_limits aura été spécialisé, tout marchera bien.
Reste ensuite à faire un "compilation assert". La
bibliothèque Loki propose une solution.


Je vais regarder ca.

Merci. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/

Avatar
kanze
"Patrick Mézard" wrote in message
news:<blhoi6$6ti$...
"Dominique Vaufreydaz" a écrit
dans le message de news:blh0kd$2sr$



Je m'excuse si cette question est recurrente... J'ai pas trouve
la reponse alors je m'adresse a vous...

Bon j'ai une classe template avec comme parametre le type de ce
qu'elle gere... Rien que de bien normale me direz vous... Par
contre, la classe ne fonctionnera pas pour tous les types et je
voudrais savoir s'il etait possible de limiter l'usage de cette
classe a certains type/classe en l'indiquant en declaration ??


Tu peux regarder du coté des "type traits" de boost :
http://www.boost.org/libs/type_traits/index.htm


Je ne crois pas que ce soit type traits qu'il veut, mais concept
check (http://www.boost.org/libs/concept_check/concept_check.htm).

--
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


Avatar
Patrick Mézard
Je m'excuse si cette question est recurrente... J'ai pas trouve
la reponse alors je m'adresse a vous...

Bon j'ai une classe template avec comme parametre le type de ce
qu'elle gere... Rien que de bien normale me direz vous... Par
contre, la classe ne fonctionnera pas pour tous les types et je
voudrais savoir s'il etait possible de limiter l'usage de cette
classe a certains type/classe en l'indiquant en declaration ??


Tu peux regarder du coté des "type traits" de boost :
http://www.boost.org/libs/type_traits/index.htm


Je ne crois pas que ce soit type traits qu'il veut, mais concept
check (http://www.boost.org/libs/concept_check/concept_check.htm).


Exact, en fait j'étais resté scotché sur la partie citée de son message, qui
revient à de la détection de types à la compilation. Mais "concept_check"
est certainement plus adapté à :

Juste pour pas avoir 2000 lignes d'erreurs alors que le probleme
vient du type qui n'est pas compatible avec les operations effectues
sur une string...


Patrick Mézard