fonction de comparaison et algos [STL] - C++ - Programmation
Marsh Posté le 07-06-2005 à 17:28:26
hum, solution 'partielle' au probleme, declarer la fonction static, mais du coup, la comparaison n'a plus le droit d'acceder aux membres... et n'est donc plus utile... Taz, if tu passes par la...
Marsh Posté le 07-06-2005 à 17:58:04
Je me rappele de problèmes similaires, sous linux et gcc, rencontrés également lorsque je cherchais à passer une méthode en argument d'une autre méthode. J'avais adoptée la solution donnée ici par farib, en passant la méthode en static.
Une solution (très très très sale) que j'avais du adoptée (mais c'était sans doute un cas plus simple) était de passer également grid en argument static ! Dans ce cas, ça doit compiler.
Ainsi, avant chaque appel à make_heap, il te faudrait également t'arranger pour que l'argument static grid prenne la valeur souhaitée (et peut être le changer alors très souvent dans ton code !).
Marsh Posté le 07-06-2005 à 18:10:17
bon, en fait je pense que je n'avais pas le choix, et j'ai gruike :
Code :
|
il s'agissait d'avoir un tas qui contienne une comme donnees des coordonnes de points, et construise le tas en fonction du potentiel f(x,y) du point. la je gruike, je fais pointer sur ce potentiel.
Marsh Posté le 18-06-2005 à 23:47:32
ReplyMarsh Posté le 19-06-2005 à 00:05:53
Code :
|
par exemple
Marsh Posté le 19-06-2005 à 00:37:49
t'es trop fort
je te cache pas que j'avais utilisée ma solution *gruik* comme précisé, parce que je n'avais la propre.
Marsh Posté le 19-06-2005 à 00:44:23
Plus généralement, tu peux utiliser une classe pour t'aider. Si tu ne veux pas exposer ton operator() ou bien si tu dois utiliser plusieurs stratégies
Code :
|
Marsh Posté le 19-06-2005 à 00:46:13
fm peut être const d'ailleurs. Tu peux aussi utiliser une référence
Marsh Posté le 19-06-2005 à 01:16:29
tu ferais bien de regarder les multi_array de boost : c'st vachement bien foutu et implémenté
Marsh Posté le 20-06-2005 à 08:26:14
tant que je suis à me cultiver:
le namespace, c'est pour encapsuler et que ce soit plus propre ?
le struc au lieu de class, c'est parce que class est pas nécessaire ?
l'utilisation de this souvent, c'est pour éviter les ambiguités de résolutions ?
Marsh Posté le 20-06-2005 à 09:31:48
1) pour éviter les collisions de noms. En C y a pas de namespace, donc on préfixe : genre gtk_label_new, gtk_box_pack_start
2) struct c'est comme classe sauf que la visibilité des membres est public et que le mode d'héritage par défaut est public.
3) oui, prend l'habitude.
Marsh Posté le 20-06-2005 à 10:37:43
en résolvant tranquillement mes gruikeries dans l'ordre:
reprenons le premier post:
comment faire compiler ça ?
finalement; c'est pas tant différent de ce que tu proposais, seulement j'ai gruiké parce que je n'arrivais pas à faire avaler ça au compilo
Marsh Posté le 20-06-2005 à 10:56:53
ben si c'est différent. Comme tu avais pas saisi le concept d'objet fonction, tu mémoriser dans chaque point un pointeur vers FastMarching.
Le mieux, c'est la solution avec le comparateur. Comme ça tu n'a pas à exposer FastMarching::operator()
Marsh Posté le 20-06-2005 à 13:32:54
en fait, la fonction de comparation, si elle n'est pas statique, doit OBLIGATOIREMENT être un operator() d'une classe ?
Marsh Posté le 21-06-2005 à 13:13:14
eupe : pourquoi le code proposé dans le premier post compile pas ?
Marsh Posté le 21-06-2005 à 13:43:36
farib a écrit : en fait, la fonction de comparation, si elle n'est pas statique, doit OBLIGATOIREMENT être un operator() d'une classe ? |
non. Elle doit être du type template spécifié en paramètre, tel que T t = T(); t(a, b); soit valide
Marsh Posté le 21-06-2005 à 14:33:31
mais c'est pas logique la raison pour laquelle il me refuse de compiler
quand comp_function est déclarée dans la classe, ça veut pas compiler, quand ça l'est en dehors, ça passe.
Marsh Posté le 07-06-2005 à 16:29:05
je recontre un léger probleme à la compilation, qui ne me parait pas
logique (evidemment)
je définit quelques structures de données:
je définis par ailleurs une classe fast_marching qui contient entre autres
dans une des méthodes, je veux créer mon tas
l'erreur du compilateur concerne l'argument "comp_function" dans le make heap et est la
suivante
cannot convert parameter 3 from 'bool (class point,class point)' to 'bool (__thiscall *)(class point,class point)'
compilo VC++ 6.0, testerai sous gcc ce soir.
il me semble pourtant avoir défini la fonction de comparaison de la
même manière que la doc le fait.
Avez-vous une idée sur la question ?
Message édité par farib le 07-06-2005 à 16:29:47
---------------
Bitcoin, Magical Thinking, and Political Ideology