[C++] question un peu tordue sur les templates

question un peu tordue sur les templates [C++] - C++ - Programmation

Marsh Posté le 29-05-2007 à 15:31:26    

Bonjour,

 

je voudrais créer une fonction de cette forme :

Code :
  1. template <class T1, class T2> void set_width (T1<T2> &signal, unsigned int width)
  2. {
  3. signal.set_width (width, 1);
  4. }
 

avec T1 qui est elle-même une classe de type template :

Code :
  1. template <T> class signal_in
  2. {
  3.       T value;
  4. ...
  5. }
 

par exemple je voudrais pouvoir faire :

Code :
  1. signal_in<int> s1;
  2. set_width (s1, 16);
 

est-ce possible ?

 

merci :)


Message édité par freewol le 29-05-2007 à 15:32:53
Reply

Marsh Posté le 29-05-2007 à 15:31:26   

Reply

Marsh Posté le 30-05-2007 à 14:23:59    

Intéressant. Je ne sais pas si c'est possible en C++. D'autres A essayer en tout cas. Peut-être avec un typedef ?
Perso, je ne me souviens pas avoir vu ce genre de choses, mais j'éviterais cela autant que possible, dans la mesure où ça rend le code difficile à lire (T1<T2> ...), et les erreurs de compilo doivent être rapidement affreuses.


Message édité par el muchacho le 30-05-2007 à 14:26:47
Reply

Marsh Posté le 30-05-2007 à 16:02:14    

Oui c'est possible.
 

Code :
  1. template <class T2, template<class T> class T1> void set_width (T1<T2> &signal, unsigned int width)
  2. {
  3.     signal.set_width (width, 1);
  4. }


 
Template template parameters (cf. C++ Templates The complete guide D. Vandervoorde). J'ai peu utiliser, comme toujours avec les templates c'est beau c'est générique, mais c'est un peu tricky et trés (trop) difficile à débugger...

Message cité 1 fois
Message édité par ElDesdichado le 30-05-2007 à 16:02:47
Reply

Marsh Posté le 30-05-2007 à 16:49:12    

ElDesdichado a écrit :


Comme toujours avec les templates c'est beau c'est générique, mais c'est un peu tricky et trés (trop) difficile à débugger...


 
ou pas  :o  gdb, boost_static_assert et des outils de métaprog génériques comme MPL et ca roulez ;)

Reply

Marsh Posté le 30-05-2007 à 18:25:12    

Joel F a écrit :

ou pas  :o  gdb, boost_static_assert et des outils de métaprog génériques comme MPL et ca roulez ;)


 
Connaît pas MPL. Par contre en parlant de boost, j'adore boost::bind (utilisé avec boost::functor) et mon VS a eu (ainsi que moi-même) beaucoupe de mal pour débugger l'animal et supprimer des memory leaks..

Reply

Marsh Posté le 30-05-2007 à 20:03:12    

sans vouloir troller , VS+template complexes = ugh.
le dernier gdb mange bien tout ça et rentre bien là ou il faut par contre :)
 
MPL c'ets une boost::library qui fournit les fonctionelles de abses pr manipuler des types de manières efficaces avec apr exemple les liste de types, les static control structure et leur interactions avec boost::tuple.

Reply

Marsh Posté le 30-05-2007 à 22:19:28    

Ok merci je testerai le code demain :)
 
En fait je suis d'accord que c'est pas très joli mais comme c'est pour une "fonction" qui fait juste une ligne, je cherche plus une utilisation de type #define.  
Et je trouve ça moche une dizaine de définition de fonctions qui s'appellent pareil, qui ont le même corps, et qui ont juste un paramètre qui change ;)

Reply

Marsh Posté le 30-05-2007 à 22:48:35    

il faut toujours privilégier les templates au define donc continue comme ça :)

Reply

Marsh Posté le 31-05-2007 à 10:40:27    

Merci je testerai MPL. Pour VS, je n'ai pas le choix donc je continuerai à débugger avec difficulté (malheuresement). En général je n'ai jamais eu de problèmes avec VSet des templates relativement courant, mais lorsque j'ai codé un moteur de calcul utilisant de la métaprog, et des genres de typelists (genre template de template de etc...) j'ai pleuré (menfin maintenant ca marche).

Reply

Marsh Posté le 31-05-2007 à 12:10:59    

ElDesdichado a écrit :


mais lorsque j'ai codé un moteur de calcul utilisant de la métaprog, et des genres de typelists (genre template de template de etc...) j'ai pleuré (menfin maintenant ca marche).


 
copaing  [:spyer]  
 
c'etait quoi si c'ets aps indiscret :p

Reply

Marsh Posté le 31-05-2007 à 12:10:59   

Reply

Marsh Posté le 31-05-2007 à 12:27:10    

un moteur générique pour résoudre des EDPs pour n'importe quel domaine donc en gros génération automatique d'une Mesh avec raffinement pour capturer les couches limites, possibilités de changer n'importe quoi comme la diffusion, les conditions aux limites, les schemas de discretisation, tout en polymorphisme statique. En gros on écrit un constructeur dans lequel on crée une typelist de propriété du domaine et le code machine se génère au moment de la compilation. Permet d'écrire peu de chose et c'est rapide genre 2-5s pour un probleme de taille 400*2000, menfin un peu compliquer à débugger le bouzin (j'étais un peu maso)...

Message cité 1 fois
Message édité par ElDesdichado le 31-05-2007 à 12:28:16
Reply

Marsh Posté le 31-05-2007 à 13:15:34    

c'est de l'indus ou de la recherche - histoire d'affiner ma biblio su rle sujet ;) -

Reply

Marsh Posté le 31-05-2007 à 15:05:24    

Finance de marché.

Reply

Marsh Posté le 31-05-2007 à 15:59:50    

ElDesdichado a écrit :

Finance de marché.


Je note :)

Reply

Marsh Posté le 01-06-2007 à 22:31:47    

ElDesdichado a écrit :

un moteur générique pour résoudre des EDPs pour n'importe quel domaine donc en gros génération automatique d'une Mesh avec raffinement pour capturer les couches limites, possibilités de changer n'importe quoi comme la diffusion, les conditions aux limites, les schemas de discretisation, tout en polymorphisme statique. En gros on écrit un constructeur dans lequel on crée une typelist de propriété du domaine et le code machine se génère au moment de la compilation. Permet d'écrire peu de chose et c'est rapide genre 2-5s pour un probleme de taille 400*2000, menfin un peu compliquer à débugger le bouzin (j'étais un peu maso)...


Hé bé, c'est pas du code de rigolo, ça. Tu connais FreeFEM++ ?

Reply

Marsh Posté le 03-06-2007 à 20:08:36    

Hum alors ça marche ?
 
Franchement j'ai essayé mais pour l'instant j'abandonne : trop d'erreur interne de compilo...

Reply

Marsh Posté le 03-06-2007 à 20:24:21    

de quoi ? les parametres template template ? ca marche farpaitement sur les vrais compilos :o

Reply

Marsh Posté le 04-06-2007 à 09:11:49    

Connaît pas FreeFEM++. M'enfin dans mon cas on doit en général conserver du code proprio qui doit être optimisé pour nos applications en particulier, c'est-à-dire par exemple inclure également dans le code des choses assez bizzares comme des modèles de volatilité locale, des modèles de frontières libres, des résolutions d'équations d'Hamilton Jacobi Bellman, etc... C'est pas vraiment ultra répandu et en général tu as besoin de connaître les problèmes mathématiques bien précis sur lesquels tu travailles (c'est assez différents des problèmes physiques), et effectivement je suis maso (et un peu matheux...). En tout cas merci pour la piste j'y regarderai de plus près. Et les templates de templates marchent sur mon compilo VS7.
 
 
[Edit]
J'ai jeté un coup d'oeil à FEM++, ca semble plutôt cool. Toutefois si en général j'ai des problèmes qui peuvent être compliqué avec des diffusions tordues ou des inéquations variationelles, on applique rarement des FEM dans mon domaine mais plutôt des FDM, on a pas vraiment besoin des FEM ou des FVM pour ce que je fais. En tout cas c'était bien cool de ta part de me suggérer cette librairie, le pire c'est que le labo JL Lions se trouvait à quelques étages du mien durant mon année à chevaleret.

Message cité 1 fois
Message édité par ElDesdichado le 04-06-2007 à 09:31:30
Reply

Marsh Posté le 04-06-2007 à 10:48:03    

ElDesdichado a écrit :

Et les templates de templates marchent sur mon compilo VS7.


 
je vais le rajouter sur ma liste de vrai compilateur :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed