C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: Fonctions "template" virtuelles ?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
SteveR
Guest





PostPosted: Sat Aug 30, 2003 10:11 pm    Post subject: Re: Fonctions "template" virtuelles ? Reply with quote



Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> écrit:
Quote:
Bonsoir,

Bonsoir,

Quote:
En essayant de compiler le code suivant, j'ai cru comprendre qu'il n'était
pas possible de définir des fonctions "template" virtuelles :

[vincent@Sherlock tmp]$ g++ -o model model.cpp && ./model
model.cpp:10: utilisation invalide de ‹ virtual› dans la déclaration d'un
patron de ‹virtual const bool model::get(int, int, TYPE*) ›
model.cpp:28: utilisation invalide de ‹ virtual› dans la déclaration d'un
patron de ‹virtual const bool myModel::get(int, int, TYPE*) ›

[...]

Quote:
class model
{
public:

template <class TYPE> // ligne 10
virtual void get(const int index, TYPE* value) = 0;
};

Vous ne pouvez pas le fait comme ça. Il faut faire de la place pour
chaque instantiation *possible* de la fonction en la table des fonctions
virtuelles.

Vous pouvez utiliser le code suivant:

class model
{
public:

virtual void get(const int index, int* value) = 0;
virtual void get(const int index, char* value) = 0;
virtual void get(const int index, double* value) = 0;
virtual void get(const int index, unsigned long* value) = 0;
virtual void get(const int index, signed short* value) = 0;
virtual void get(const int index, std::string* value) = 0;
};

Vous avez besoin d'une "get()" pour chaque type que vous l'utiliserez.
Une fonction virtuelle template serait idéale, si la langue C++ la
permettait.

Si vous utilisez une "get()" pour chaque type et vous avez besoin d'une
nouvelle "get()", vous devez la créer en chaque classe derivée.

--
SteveR

Je m'excuse de mon français mauvais.

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Sep 02, 2003 7:55 am    Post subject: Re: Fonctions "template" virtuelles ? Reply with quote



Samuel Krempp <krempp (AT) crans (DOT) trucs.en.trop.org> wrote

Quote:
le Lundi 1 Septembre 2003 05:31, [email]gdr (AT) integrable-solutions (DOT) net[/email] écrivit :

Parce que la norme l'interdit.

| comprendre ce qui coince au niveau du compilateur...

Dans le modèle objet (implicitement admis), une fonction virtuelle
fait partie intégrante de l'objet (plus exactement du type_infor de
l'objet, mais cela ne change pas grand chose) -- contrairement aux
fonctions non-virtuelles. Un template étant une famille
potentiellement infinie et pouvant être instantiée à n'importe quel
moment, une fonction virtuelle template contredirait l'invariant
qu'un objet, une fois construit, ne change pas de « taille ».

mais dans le fond, j'imagine qu'il serait possible d'ajouter au C++ la
possibilité d'avoir des template de fonctions virtuels sans changer la
sémantique du langage pour le reste, et sans créer d'incohérences,
non ? (si on arrive à n'utiliser qu'une vtable par template de
fonction virtuelle par exemple)

Je ne sais pas. Une implémentation qui me vient immédiatement à la tête,
c'este que l'entrée pour une fonction template dans le vtable designe en
fait un tableau haché. Ce qu règle le problème d'ouverture dans
l'implémentation de l'appel. N'empeche même sans beaucoup reflechir, je
vois des problèmes : comment établir l'ensemble des fonctions
instantiées, par exemple, ou comment implémenter des pointeurs à des
fonctions membre. Le premier est, d'autant que je peux déviner sans
vraiment m'y appliquer, un argument conclusif -- un « killer », comme on
dit en anglais.

J'imagine que quelqu'un avec de l'expérience avec les compilateurs
pourrait trouver encore davantage de problèmes. Mais déjà, pour
commencer, avant d'en parler plus, j'aimerais savoir le point
d'instantiation (qui détermine le contexte de la recherche des noms
dépendants) d'une telle fonction.

Quote:
J'imagine volontiers que ce serait de toute façon un changement
profond du coté des objets produit, qui causerait des casses-têtes
d'incompatibilité pendant pas mal de temps, au point de ne pas valoir
le coup. mais bon..

Dire qu'il casserait la compatibilité objet, ça me paraît la moindre des
choses:-).

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) 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

Back to top
Alain Naigeon
Guest





PostPosted: Tue Sep 02, 2003 10:50 am    Post subject: Re: Fonctions "template" virtuelles ? Reply with quote



Tout récemment, j'ai lu qu'on rappelait la nécessité
bien connue d'avoir un destructeur virtuel dans une
classe de base. Alors subitement je me dis (seulement
aujourd'hui !!), y aurait-il un problème si cette classe
de base est template ? Ou bien l'interdiction vaut-
elle seulement pour les fonctions membres autres que
le destructeur ? Il me semble que oui, sinon j'aurais
eu des problèmes, je pense, puisque le problème se
pose dès lors qu'on hérite d'une classe template.

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - [email]anaigeon (AT) free (DOT) fr[/email] - Strasbourg, France


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.