 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
nmartin Guest
|
Posted: Fri May 19, 2006 2:21 pm Post subject: template avec fonction template comme parametre |
|
|
bonjour,
le fil precedent a fait remonté en moi une question que j'ai voulu poser
il y a bien longtemps.
j'avais une classe templaté qui effectué dans sa premiere version un
static_cast dans le code. à l'utilisation, le static s'est transformé en
dynamic_cast.
j'avais tenté a l'epoque de passer en parametre de ma classe
le type de cast en me basant sur le fait qu'un cast est une focntion
template avec pour prototype :
template<typename Target, typename Source> Target XXX_cast(Source );
j'avais lu sur le site de ibm si je ne me trompe qu'il etait possible
d'utiliser des fonctions templates comme parametre d'une classe template.
Mon probleme est que je n'ai jamais reussit a compiler le code.
Pour vous donner une idée je voulais avoir quelque chose dans ce style :
template < ... XXX_cast... >
class Test{
A * process(B* b){
return XXX_cast<A*>(b);
}
}
Test<mon_static_cast> test; ....
nicolas. |
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Fri May 19, 2006 8:21 pm Post subject: Re: template avec fonction template comme parametre |
|
|
nmartin a écrit :
| Quote: | bonjour,
le fil precedent a fait remonté en moi une question que j'ai voulu poser
il y a bien longtemps.
j'avais une classe templaté qui effectué dans sa premiere version un
static_cast dans le code. à l'utilisation, le static s'est transformé en
dynamic_cast.
j'avais tenté a l'epoque de passer en parametre de ma classe
le type de cast en me basant sur le fait qu'un cast est une focntion
template avec pour prototype :
template<typename Target, typename Source> Target XXX_cast(Source );
|
Ce qui est une mauvaise hypothèse.
Il s'agit de mots clef du langage.
Rien ne t'empêche de faire des fonctions template qui encapsulent ces
opérateurs, par contre.
--
Loïc |
|
| Back to top |
|
 |
Fabien CHÊNE Guest
|
Posted: Fri May 19, 2006 9:21 pm Post subject: Re: template avec fonction template comme parametre |
|
|
nmartin <twxsAT (AT) freeAT (DOT) fr> writes:
| Quote: | [...]
j'avais lu sur le site de ibm si je ne me trompe qu'il etait possible
d'utiliser des fonctions templates comme parametre d'une classe template.
|
C'est également faisable avec des foncteurs, et dans le cas présent,
je trouve cela plus simple.
| Quote: | Mon probleme est que je n'ai jamais reussit a compiler le code.
Pour vous donner une idée je voulais avoir quelque chose dans ce style :
template < ... XXX_cast...
class Test{
A * process(B* b){
return XXX_cast<A*>(b);
}
}
Test<mon_static_cast> test; ....
|
Peut-être que quelquechose dans ce goût te conviendrai :
struct A {};
struct B : A {};
template <class T>
struct Static_cast_wrapper
{
template <class U>
T operator()( U const& u ) const
{ return static_cast<T>( u ); }
};
// Appliqué à ton exemple :
template < template <class> class Cast >
struct Test
{
A* process( B* b )
{ return Cast<A*>()( b ); }
};
int main()
{
Test<Static_cast_wrapper> test;
B b;
A* a = test.process( &b );
}
--
Fab |
|
| Back to top |
|
 |
nmartin Guest
|
Posted: Sun May 21, 2006 7:22 am Post subject: Re: template avec fonction template comme parametre |
|
|
Fabien CHÊNE a écrit :
| Quote: | nmartin <twxsAT (AT) freeAT (DOT) fr> writes:
[...]
j'avais lu sur le site de ibm si je ne me trompe qu'il etait possible
d'utiliser des fonctions templates comme parametre d'une classe template.
C'est également faisable avec des foncteurs, et dans le cas présent,
je trouve cela plus simple.
[...]
|
Le princpipe des objets fonctions me gene un peu dans le sens ou
je suppose que j'ai dans mes lib mes porpres fonctions de cast sous
forme de fonctions template que j'utilise ailleur dans mon code. je n'ai
donc pas envis de les wrapper ou transformer ces fonctions en classes.
C'est ce que j'avais fini par faire tout de meme et ceci fonctionne,
mais ce qui m'avait géné, c'est que sur le web on me dit que je peux
mettre en parametre de classe un fonction template
et j'avais testé pas mal de syntaxes différentes sans succes.
j'etais resté sur ma faim avec 3 hypotheses :
- la norme n'autorise pas ce type de parametre
- la norme l'autorise mais pas mon compilateur (VC2005)
- c'est moi qui n'ai pas su ecrire la syntaxe correctement |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Mon May 22, 2006 8:21 am Post subject: Re: template avec fonction template comme parametre |
|
|
nmartin wrote:
| Quote: | Fabien CHÊNE a écrit :
nmartin <twxsAT (AT) freeAT (DOT) fr> writes:
[...]
j'avais lu sur le site de ibm si je ne me trompe qu'il etait
possible d'utiliser des fonctions templates comme parametre
d'une classe template.
C'est également faisable avec des foncteurs, et dans le cas
présent, je trouve cela plus simple.
[...]
Le princpipe des objets fonctions me gene un peu dans le sens
ou je suppose que j'ai dans mes lib mes porpres fonctions de
cast sous forme de fonctions template que j'utilise ailleur
dans mon code. je n'ai donc pas envis de les wrapper ou
transformer ces fonctions en classes.
C'est ce que j'avais fini par faire tout de meme et ceci
fonctionne, mais ce qui m'avait géné, c'est que sur le web on
me dit que je peux mettre en parametre de classe un fonction
template et j'avais testé pas mal de syntaxes différentes sans
succes.
j'etais resté sur ma faim avec 3 hypotheses :
- la norme n'autorise pas ce type de parametre
- la norme l'autorise mais pas mon compilateur (VC2005)
- c'est moi qui n'ai pas su ecrire la syntaxe correctement
|
Si tu parles des paramètres template d'un template, la norme
l'autorise bien, mais il y a encore des compilateurs qui ne le
supporte pas. (Y compris, peut-être VC 2005. Mais certainement
Sun CC 5.5.)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
nmartin Guest
|
Posted: Mon May 22, 2006 9:21 am Post subject: Re: template avec fonction template comme parametre |
|
|
kanze a écrit :
| Quote: | nmartin wrote:
[...]
Si tu parles des paramètres template d'un template, la norme
l'autorise bien, mais il y a encore des compilateurs qui ne le
supporte pas. (Y compris, peut-être VC 2005. Mais certainement
Sun CC 5.5.)
VC 2005 accepte les parametres "classe template" (le 7.1 egalement, je |
n'ai pas testé sur les autres) mais a priori pas les fonctions template
comme parametre...
je vais essayer de retrouver mon code de l'epoque |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Mon May 22, 2006 1:21 pm Post subject: Re: template avec fonction template comme parametre |
|
|
nmartin wrote:
| Quote: | kanze a écrit :
[...]
Si tu parles des paramètres template d'un template, la norme
l'autorise bien, mais il y a encore des compilateurs qui ne le
supporte pas. (Y compris, peut-être VC 2005. Mais certainement
Sun CC 5.5.)
VC 2005 accepte les parametres "classe template" (le 7.1
egalement, je n'ai pas testé sur les autres) mais a priori pas
les fonctions template comme parametre...
|
J'avais lu trop vite. Il n'y a pas de paramètres template de
fonction. Un paramètre d'un template peut être une valeur (de
certains types seulement, et la valeur du paramètre réel doit
être une constante), un type, ou un template de classe.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
nmartin Guest
|
Posted: Mon May 22, 2006 2:22 pm Post subject: Re: template avec fonction template comme parametre |
|
|
kanze a écrit :
| Quote: | nmartin wrote:
kanze a écrit :
[...]
Si tu parles des paramètres template d'un template, la norme
l'autorise bien, mais il y a encore des compilateurs qui ne le
supporte pas. (Y compris, peut-être VC 2005. Mais certainement
Sun CC 5.5.)
VC 2005 accepte les parametres "classe template" (le 7.1
egalement, je n'ai pas testé sur les autres) mais a priori pas
les fonctions template comme parametre...
J'avais lu trop vite. Il n'y a pas de paramètres template de
fonction. Un paramètre d'un template peut être une valeur (de
certains types seulement, et la valeur du paramètre réel doit
être une constante), un type, ou un template de classe.
merci, ceci me rassure, c'est ce que je croyai jusqu'a ce que je tombe |
sur une page ou il etait dit que c'etait accepté (le site paraissait
credible, mais je ne retrouve plus l'url) |
|
| Back to top |
|
 |
|
|
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
|
|