Ce n'est pas non plus la méta-programmation qui va faire ça, c'est la partie optimiseur du compilateur.
Version imprimable
Ce n'est pas non plus la méta-programmation qui va faire ça, c'est la partie optimiseur du compilateur.
Oui et non. Par exemple tu fait un algorithm de traitement d'image spécifique pour un projet. Au lieu de réécritures comme une brut tout le code correspodant, tu va utiliser ces concepts, et ne pas repartir de zero. La metaprog est bonne que s'il y as les grande ligne connu à la compilation.Citation:
Envoyé par Miles
C'est le même problème que la STL, si tu veut.
Ell va permetre de donner au compilot un code correspondant a ce que tu veut faire a un endroit de ton programme. Et en particulier sous une forme simple.Citation:
Envoyé par Miles
Ce qui correspont bien a une utilisation pour le traitement d'image.
Par exemple à un endroit du programme, tu veut passer un filtre sur une partie de l'image. Tu peut utiliser la metaprog pour te generer le code pour le parcoure de la partie de l'image et du noyau de calcul du filtre.
Tout de même, la STL est bien plus facilement utilisable que la méta-programmation. Par exemple les ouvrages dédiés à cette méthode montrent clairement que ce n'est déjà pas accessible à tout le monde (jamais des chercheurs en TS feront l'effort de l'utiliser, c'est complexe à programmer et à débugger) et ça ne fait pas tant de choses que ça.
En fait, je ne suis pas sûr qu'on parle exactement des mêmes outils. Par exemple, Boost propose une bibliothèque là-dessus, on va dire qu'à part travailler sur des types et des entiers, on ne peut pas faire grand chose d'autre.
J'imagine que par filtre, tu entends noyau de convolution dans l'exemple que tu as donnés.
De toute façon, le temps de création du filtre est en général totalement négligeable par rapport au temps pour l'appliquer (d'autant plus si le noyau est gros). Donc, je ne vois pas l'interêt si ça amène une complexité importante au niveau du code :roll:
justement çela va la simplifierCitation:
Envoyé par millie
imagine une template
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 template< class _Tpixel, class _TPixelIterator, int _Hsize, int _Wsize, int _a1 =0, int _a2 =0, int _a3 =0, int _a4 =0, . . . int _an =0> class filter { . . . }
Plustôt que de re developper un code pour un filtre special, en prenant en compte tu ce que tu as besoin pour avoir accés au pixel voisin
ton filtre devient :
filter<RGB,2DIterator,3,3,-1 ,0,1,-1,0,1,-1,0,1> et tu n'aura pas écrit qu'une ligne de code
Ce n'est qu'un exemple simple bien sur
Tu peut voir la STL comme de la metaprogCitation:
Envoyé par Miles
La STL n'utilise que des notions basiques de métaprogr : les traits, principalement.
Je te conseille le bouquin "C++ Template Metaprogramming" avant de continuer à argumenter dans le vide.
Oui, et ce n'est que de l'utilisation classique d'un template, pas vraiment de la méta-programmation comme je l'entend.Citation:
Envoyé par Mongaulois
Il m'arrive d'utiliser des outils pour activer ou désactiver des fonctions selon le type utilisé, et je ne considère pas cela comme de la méta-programmation.
On commence vraiment à rentrer dans la méta-programmation en automatisant des tâches telles que des hiérarchies, des expressions ou du dispatching, mais sérieusement, 99% des gens ne devraient même pas savoir que ça existe tellement c'est complexe à mettre en oeuvre, à utiliser et à débugger.
La vraie métaprogrammation est très rare.
Les gens utilisant bien les templates un peu moins.
Les bonnes docs et bons livres que tu peux lire sur le sujet seront la doc de Boost.MPL, le bouquin que j'ai cité plus haut, des bouquins et articles de Andrei Alexandrescu.
Tu prendras alors conscience 1) de la portée de la métaprogrammation et de sa difficulté 2) des moments où l'on parle de métaprogr ainsi que ceux où l'on doit s'en servir.
J'argumente pas dans le vide et en plus tu confirme ce que je dit. J'ai pas dit que c'était de la metaprog pur.Citation:
Envoyé par Alp
Toute façon c'est pas possible d'expliquer tout les concepts pour de la metaprog pour du traitement d'image en quelques lignes.
Faudrait que j'explique l'ensemble, ce qui deviens énorme. J'essaie de faire comprendre où ce trouve l'interêt. Aprés on n'est pas obligé d'être d'accord. Et c'est vrai que je n'ai pas d'exemple concret a vous donné :cry: (lib propriétaire)
Puis le but de ce post n'est pas de partir en troll. On peut faire un autre post sur çela si vous voulais.
On peut ouvrir un autre sujet, mais sincèrement, la seule fois que j'ai vu quelque chose qui ressemblait à de la métaprog en traitement d'image, c'était une utilisation classique des templates appliquée au conteneur qu'on utilisait (cf Vigra).
Comment on fait pour des noyaux de convolution de taille quelconque ?Citation:
Envoyé par Mongaulois
Et il faut faire attention aussi si le noyau n'est pas carré.
Faire comme ça me semble plus simple conceptuellement http://subversion.developpez.com/pro...nel/Kernel.hpp
Ou (lien temporaire) : http://humbert-florent.developpez.co..._1_kernel.html
On pourra bientôt avec les variadic templates ;)
yep :king:Citation:
Envoyé par Alp
En tout cas un grand merci à tous le monde pour toute ces réponses pertinente :king: . C'est super l'intéressante, et je comprend mieux un peu tout ce chmiblik
Sinon, pour revenir au sujet. Es que vous pourriez m'aider à lister la ou le C et le c++ ont leurs points forts et les sépare...
c++ :
- POO simplifié
- template
- metaprog
- flux
- programmation de haut niveau
C :
- POO compliqué mais puissante (ex GLIB,GTS)
- tous peut être (void*)
- flux
- programmation itératif (??)
Les avantages que tu donnes au C sont aussi pour le C++, même si on peut dire que l'avantage que tout puisse être void* est surtout la preuve d'un problème de conception en C++
:cry: mais je dit pas ça (j'ai pas parlé de void* avec le c++) je cherche à trouver les vrais différences (conceptuel ou autre). Je programme en C++. Mais si je ne donne pas d'exemple, qui va m'aider? Je cherche à différencier correctement ces deux languages.Citation:
Envoyé par Miles
Aprés je peut écrire des erreur en C, puisse que j'ai compris que n'en faisait pas :D.
Sinon on n'as qu'as dire que C++ est du C avec plus de fonctionnalité et ça résous mon problème. Mais c'est faux. Aprés çela ne tiens peut être qu'a moi de vouloir comprendre ça. SI on n'est pas capable de les différencier, on ne pas affirmer qu'ils sont différents :?
Il y a quelques temps, le C++ était vraiment une surcouche du C car il respectait la norme C90. Maintenant, C99 est sorti, et donc il y a des nouveautés que le C++ n'a pas forcément et que le C a.
http://nicolasj.developpez.com/articles/c99/ donne ces nouveautés
Il a de tout temps existé des programmes C valides qui n'étaient pas valides en C++. Par exemple un truc genre :Citation:
Envoyé par Miles
Code:
1
2
3
4
5
6
7
8
9 void f(void) { int i = g(); } int g(void) { return 42; }
Le c99 ne demande t il pas aussi de déclarer les variables en début de portée?