template et functor - C++ - Programmation
Marsh Posté le 06-02-2009 à 07:40:01
si sauf que ton ap^pel est faux :
Code :
|
Sidenote : les functor c'est so 1990, le hype c'ets les Polymorphic Function Object
Marsh Posté le 06-02-2009 à 17:31:09
c'est quoi la différence en deux mots, y a beaucoup à lire et je me sens pas le courage today
Marsh Posté le 06-02-2009 à 18:17:41
un PFO est un foncteur qui supporte le protocole result_of. Il prend des arguments template et sait seul calculer le type de retour afferent.
On peut soit appeller un PFO comme un foncteur en l'instanciant et utilsiant son operator() soit utiliser la meta-fonctionr esult_of pr rensigner son type de retour.
Code :
|
Marsh Posté le 06-02-2009 à 20:41:10
ça sert à koi ce bout de code :
Code :
|
Le This(T) surtout
Marsh Posté le 06-02-2009 à 20:51:12
non en faite c'est le Addpointer qu'est ce qu'il vient foutre ici
Marsh Posté le 06-02-2009 à 20:58:54
la structure interne result permet de supporté le protocole result_of :
http://www.boost.org/doc/libs/1_37 [...] #result_of
Il prend un type fonction pr transferer les information pr calculer le type de retour du foncteur. Maintenant ... quel est el type de &t ou T est de type T ???
T* et devine ce que add_pointer<T>::type peut bien renvoyait ...
Marsh Posté le 06-02-2009 à 22:48:50
ça compile pas chez moi, d'une le compilo gueule parcequ'il faut mettre typedef typename devant boost::addpointer et le take_adress(T)
Code :
|
renvoit : error C2275: 'T' : utilisation non conforme de ce type comme expression
Normal ?
Marsh Posté le 07-02-2009 à 08:50:57
t'as quoi comme compilateur antediluvien, VC6 ?
t'as bien boost d'installer ?
Marsh Posté le 07-02-2009 à 13:49:40
oui j'ai boost d'installer, qui marhe correctement, et j'utilise visual 2008 express
Marsh Posté le 07-02-2009 à 14:37:01
ce qui me surprends aussi,c'est que le type de retour typename result<take_adress(T)>::type de la fonction operator() utilise cette fonction avant même qu'elle soit défini, je pensais pas que ça pouvais marcher!
Marsh Posté le 07-02-2009 à 16:11:30
et puis à quoi cela sert d'utiliser result<take_adress(T)> plutot que simplement result<T> étant donné que boost::ad_pointer ne prend que T ??
Marsh Posté le 07-02-2009 à 21:00:09
Y a qu'une fonction : operator(), result c'ets une meta-fonction.
t'as lu les liens du dessus ou pas ?
Marsh Posté le 07-02-2009 à 21:19:42
bon oui je vais lire un peu plus "profondément" , mais je capte toujours pas pourquoi est ce que le compilo ne veut pas du code. En etnête je mets ça
#include <boost/utility.hpp>
#include <boost/type_traits/add_pointer.hpp>
Marsh Posté le 07-02-2009 à 23:43:36
Je crois que ce qui déroute, c'est la syntaxe result<take_adress(T)>
Marsh Posté le 07-02-2009 à 23:50:15
passage d'un type fonction en parametre template
toto(titi) = fonction renvoyant un type toto et prenant en argument un type titi.
C'ets une expression de type valide en C++, on s'en sert donc comme parametre template pr faciliter l'extraction d'information de type composés.
Marsh Posté le 08-02-2009 à 21:55:20
mais y a un soucis aussi
Code :
|
vu que &t est const et que le type de retour est non const
Marsh Posté le 08-02-2009 à 22:10:01
ouais peut etre, mais bon, pas dur de completer pour que ça marche à titre d'exercice
Marsh Posté le 11-02-2009 à 17:47:54
une autre chose que je comprends pas:
Code :
|
Pourquoi est ce que a un endroit du code on utilise take_adress()() et un à autre take_adresse() ?
Marsh Posté le 11-02-2009 à 17:52:53
également :
dans cette partie là du code :
Code :
|
quel est le véritable paaramètre passé à result :
- take_adress(T)
ou
- &t
?
Marsh Posté le 11-02-2009 à 18:00:58
weblook$$ a écrit : |
le premeir on construit un objet take_address et on appelle son operateur()
le deuxieme on construit un type fonction renvoyant un take_address.
Citation : |
- take_adress(T)
result calcul un type et non une valeur
Marsh Posté le 11-02-2009 à 19:11:04
Joel F a écrit : |
Code :
|
Avec cette syntaxe là, take_address(T), on appel donc pas l'opérateur() ?
Marsh Posté le 11-02-2009 à 19:14:10
non on construit un type qui est :
"fonction prenant un argument de Type T et renvoyant take_address"
il n'ets la que pour transporter les infos sur le lieu d'evaluation du type de result
Marsh Posté le 11-02-2009 à 19:23:58
donc take_adress(T) est équivalent à "take_adress f(T)" , sauf que l'on ne donne pas de nom à la fonction ?
Marsh Posté le 11-02-2009 à 19:40:47
que veux donc tu dires par,
"fonction prenant un argument de Type T et renvoyant take_address"
Marsh Posté le 11-02-2009 à 20:06:31
, j'arrive pas avec ce code à compredre le pourquoi du comment , ça me rend ouf
ce qui m'échappe c'est qu'au final on aurait écrit :
Code :
|
ça serait revenu au meme non?... et c'est en l'écrivant que je m'apperçois que non, y a effectivement un soucy avec le result_of<int>
Marsh Posté le 11-02-2009 à 22:37:35
oui, t'as pas lu la doc que je t'ai passer.
Ensuite, un protocole on le suit sinon ca sert à rien
Marsh Posté le 12-02-2009 à 14:09:37
oui mais j'ai rien capté à la doc :
The class template result_of helps determine the type of a call expression. Given an lvalue f of type F and lvalues t1, t2, ..., tN of types T1, T2, ..., TN, respectively, the type result_of<F(T1, T2, ..., TN)>::type defines the result type of the expression f(t1, t2, ...,tN). The implementation permits the type F to be a function pointer, function reference, member function pointer, or class type. When F is a class type with a member type result_type, result_of<F(T1, T2, ..., TN)> is F::result_type. Otherwise, result_of<F(T1, T2, ..., TN)> is F::result<F(T1, T2, ..., TN)>::type when N > 0 or void when N = 0. For additional information about result_of, see the C++ Library Technical Report, N1836, or, for motivation and design rationale, the result_of proposal.
Marsh Posté le 12-02-2009 à 14:15:16
comment est ce que l'expression f(t1, t2, ...,tN) peut avoir un type???
Marsh Posté le 12-02-2009 à 18:07:19
c'est un appel de fonction, son result_type est son type de retour qui depend polymorphqiuement des types de ces entrées. Point y a rien de sorcier, c'est les trucs de bases sur le typage des fonctions.
Marsh Posté le 12-02-2009 à 18:59:05
bah rien de sorcier rien de sorcier elle est bien bonne celle là!
le type que retourne une fonction, à ce que je saches , n'est pas fonction de ses entrées....
Marsh Posté le 12-02-2009 à 19:08:21
weblook$$ a écrit : bah rien de sorcier rien de sorcier elle est bien bonne celle là! |
Le C++ ne supporte pas la surcharge uniquement sur le type de retour des fonctions. Donc quand tu as le nom et le type des paramètres, tu as le type de retour (sauf s'il y a une ambiguité).
Marsh Posté le 06-02-2009 à 00:43:24
Hi,
On ne peut pas passer un functor comme paramètre template?
Merci.