OVH Cloud OVH Cloud

Référence de pointeur

38 réponses
Avatar
Stephane SOPPERA
Bonjour,

Je vous présente ici un petit souci que j'ai eu au travail.

Mettons que nous ayons la situation suivante:
class Base
{
public: virtual ~Base() {}
};

class Enfant1 : public Base
{
};

class Enfant2 : public Base
{
};

J'avais écrit une fonction du type:
void FreeBase ( Base *&p )
{
if ( NULL != p )
{
/* un traitement sur p ici */
....
/* fin du traitement */

delete p;
p = NULL;
}
}

Ainsi j'ai essayé d'utiliser:
Enfant1 *e1 = new Enfant1(...);
Enfant2 *e2 = new Enfant2(...);
...
FreeBase ( e1 );
FreeBase ( e2 );

malheureusement ça ne compile pas. L'erreur est quelque chose comme:
conversion impossible de Enfant1 * vers Base *&.

Est-ce que c'est vraiment impossible?
Suis-je obligé d'utiliser une méthode template dans ce cas là? (ce qui
m'est impossible, les templates m'étant interdits)

Je ne suis pas satisfait par le copier/coller que j'utilise pour l'instant.

Merci d'avance,

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera

10 réponses

1 2 3 4
Avatar
Stephane SOPPERA
Non, je travaille dans une grosse boite qui produit un logiciel
multi-plateformes et qui a décidé de banir les templates.


Faudrait penser à proposer à celui qui a décidé ça de bannir également
l'usage de la lettre "a" dans les noms de variables...


Personnellement je ne le condamnerai pas avant d'entendre ses arguments.
Peut-être qu'une des plateformes sur lequel le logiciel est distribué
il n'y a pas de compilateur supportant correctement les templates.

Mais enfin il est vrai que c'est fort dommageable et que la programmation
n'en est que plus sale.

--
Stephane SOPPERA
http://perso.wanadoo.fr/stephane.soppera


Avatar
Alain Naigeon
"Stephane SOPPERA" a écrit dans le message news:
bgbl57$hsa$
Non, je travaille dans une grosse boite qui produit un logiciel
multi-plateformes et qui a décidé de banir les templates.


Faudrait penser à proposer à celui qui a décidé ça de bannir également
l'usage de la lettre "a" dans les noms de variables...


Personnellement je ne le condamnerai pas avant d'entendre ses arguments.
Peut-être qu'une des plateformes sur lequel le logiciel est distribué
il n'y a pas de compilateur supportant correctement les templates.

Mais enfin il est vrai que c'est fort dommageable et que la programmation
n'en est que plus sale.


Sans compter qu'en écrivant les choses n fois au lieu d'une,
on peut facturer beaucoup plus. Ca me démange vraiment
de demander le nom de cette boîte :-)

--

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



Avatar
Alain Naigeon
"Stephane SOPPERA" a écrit dans le message news:
bgbkre$hsa$
| Non, je travaille dans une grosse boite qui produit un logiciel
| multi-plateformes et qui a décidé de banir les templates.

est-ce une décision technique ? Politique ?


En fait je n'ai pas encore pu le savoir. Et je n'ai pas encore rencontré
de gens qui savaient ;-)


Aha, c'est la version moderne du "Château".

--

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


Avatar
Loïc Joly
Alain Naigeon wrote:
"Stephane SOPPERA" a écrit dans le message news:
bgbkre$hsa$

| Non, je travaille dans une grosse boite qui produit un logiciel
| multi-plateformes et qui a décidé de banir les templates.

est-ce une décision technique ? Politique ?


En fait je n'ai pas encore pu le savoir. Et je n'ai pas encore rencontré
de gens qui savaient ;-)



Aha, c'est la version moderne du "Château".


D'après son adresse e-mail, il n'est pas depuis très longtemps dans la
vie active, et il est donc plus compréhensible qu'il n'ait pas encore
réussi à faire admettre ses opinions en matière de conventions de codage.

--
Loïc



Avatar
Alain Naigeon
"Loïc Joly" a écrit dans le message news:
bgc8np$e9s$
Alain Naigeon wrote:
"Stephane SOPPERA" a écrit dans le message news:
bgbkre$hsa$

| Non, je travaille dans une grosse boite qui produit un logiciel
| multi-plateformes et qui a décidé de banir les templates.

est-ce une décision technique ? Politique ?


En fait je n'ai pas encore pu le savoir. Et je n'ai pas encore rencontré
de gens qui savaient ;-)



Aha, c'est la version moderne du "Château".


D'après son adresse e-mail, il n'est pas depuis très longtemps dans la
vie active, et il est donc plus compréhensible qu'il n'ait pas encore
réussi à faire admettre ses opinions en matière de conventions de codage.


Ok ; mon ironie ne le visait pas, mais ceux ayant édicté cet interdit,
sans qu'ils aient manifestement pris la peine d'en expliquer les raisons
- folkloriques ou sérieuses - à ceux qui doivent les respecter.
Je n'aimerais pas rester avec des gens qui me traitent comme un bidasse.

--

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




Avatar
Cyril.Gruau
Ça me rappelle furieusement le "this->" imposé pour toute utilisation
de variable membre...


Qui lui-meme rappelle douloureusement tous les this-> systematiquement
omis ...

Cyril

Avatar
Fabien LE LEZ
On Fri, 01 Aug 2003 12:01:26 GMT, (Cyril
Gruau) wrote:

Qui lui-meme rappelle douloureusement tous les this-> systematiquement
omis ...


Tu sous-entends que le "this->" aurait une utilité quelconque ?
Franchement, si dans ton code le "this->" est nécessaire, c'est que
ton code manque désespérément de clarté !


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On Fri, 01 Aug 2003 12:01:26 GMT, (Cyril
| Gruau) wrote:
|
| >Qui lui-meme rappelle douloureusement tous les this-> systematiquement
| >omis ...
|
| Tu sous-entends que le "this->" aurait une utilité quelconque ?

Yep.

| Franchement, si dans ton code le "this->" est nécessaire, c'est que
| ton code manque désespérément de clarté !

Attention, tu vas réveiller James.

#include <iostream>
#include <ostream>

template<class T>
struct X : T {
int f(int i)
{
return this->g(i);
}
};


struct A {
int g(int i)
{
return i * i;
}
};


int main()
{
X<A> a;
return a.f(0);
}

-- Gaby
Avatar
Fabien LE LEZ
On 01 Aug 2003 15:13:36 +0200, Gabriel Dos Reis
wrote:

| Tu sous-entends que le "this->" aurait une utilité quelconque ?

Yep.


Je me suis mal exprimé, je voulais parler de la règle qui impose de
mettre systématiquement "this->" devant les membres. Je n'ai rien
contre l'utilisation de "this->" (ou de toute autre chose d'ailleurs)
à bon escient.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On Thu, 31 Jul 2003 18:47:05 +0200, "Stephane SOPPERA"
wrote:

Non, je travaille dans une grosse boite qui produit un logiciel
multi-plateformes et qui a décidé de banir les templates.


Faudrait penser à proposer à celui qui a décidé ça de bannir également
l'usage de la lettre "a" dans les noms de variables...


Il est probablem qu'ils ont banni l'utilisation de la lettre 'à'.

On bannit ce qui n'est pas portable dans la pratique. Ce qui n'est pas
portable, c'est des choses qui varient d'un compilateur à l'autre.
Jusqu'à ce jour, je n'ai jamais vu ni entendu parlé d'un compilateur qui
traitait la lettre 'a' autrement que ce que veut la norme. En revanche,
les compilateurs diffèrent en ce qui concerne leur support pour des
caractères accentués (ou des noms des caractères universels). Du coup,
on les interdit dans le C++ qui doit être portable.

Dans la pratique, les compilateurs diffèrent aussi énormement en ce qui
concerne la recherche d'un nom dans un template. La solution la plus
simple pour la portabilité, c'est d'interdire les templates (ou au
moins, des templates qui contiennent un nom autre qu'un paramètre du
template, mais c'est tellement contraignant alors que ce n'est pas la
peine).

C'est la solution la plus simple. Ce n'est pas forcement la meilleur. Je
sais (ayant développé du code avec <generic.h>) ce que peut coûter se
passer des templates. J'estîme que les templates apportent assez que ça
vaut la peine de faire un effort (en termes de gestion des noms, etc.)
pour que le code soit portable, même si ce n'est pas naturel. Mais je
comprends bien une société qui ne veut pas prendre la risque. Parce que
tant que tous les compilateurs n'ont pas implémenté la même chose (c-à-d
ce que démande la norme, y compris export), les templates ne sont pas
portables, au moins pas sans restrictions.

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


1 2 3 4