Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1284 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  template , methode virtuelle et inline

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

template , methode virtuelle et inline

n°558353
Joel F
Real men use unique_ptr
Posté le 04-11-2003 à 09:03:09  profilanswer
 

Peut t on inliner une fonction virtuelle ?
Le fait qu'elle fasse partie d'un classe tempate change t il quelquechose ?
-O3 forcera t il cet inlining ??
 
un exemple :
 

Code :
  1. #include <iostream>
  2. struct term
  3. {
  4.   virtual inline int getNode() {return 0;}
  5. };
  6. struct plus
  7. {
  8.    static inline int apply(int x, int y) { return x+y; }
  9. };
  10. class leaf : public term
  11. {
  12.     public:
  13.     leaf( int v) : val(v) {}
  14.     virtual int inline getNode() { return val; }
  15.     private :
  16.     int val; 
  17. };
  18. template<class X,class O> class unary_term : public term
  19. {
  20.     public:
  21.     unary_term( X node) : node_(node) {}
  22.     virtual int inline getNode() { return O::apply(node_.getNode()); }
  23.     private :
  24.     X node_; 
  25. };
  26. template<class X,class Y,class O> class binary_term : public term
  27. {
  28.     public:
  29.     binary_term( X nodex, Y nodey ) : node_x(nodex),node_y(nodey) {}
  30.     virtual int inline getNode()
  31.     { return O::apply(node_x.getNode(),node_y.getNode()); }
  32.     private :
  33.     X node_x;
  34.     Y node_y;
  35. };
  36. template<class X> class expression : public term
  37. {
  38.     public:
  39.     expression( X xpr ) : expr_(xpr) {}
  40.     virtual int inline getNode() { return expr_.getNode(); }
  41.     private :
  42.     X  expr_;
  43. };
  44. class function
  45. {
  46.     public:
  47.    
  48.     template<class X>
  49.     function& operator=( expression<X> t ) { expr_ = &t; return *this; }
  50.    
  51.     inline int operator()()  { return expr_->getNode(); }
  52.     private :
  53.     term*  expr_;
  54. };
  55. class val : public term
  56. {
  57.    public:
  58.    val( int v) : v_(v) {}
  59.    virtual int inline getNode()  { return v_; }
  60.    private:
  61.    int v_;
  62. };
  63. inline expression<binary_term<leaf,leaf,plus> > operator+( val a, val b )
  64. {
  65.   return expression<binary_term<leaf,leaf,plus> >(binary_term<leaf,leaf,plus>(leaf(a.getNode()),leaf(b.getNode())));
  66. }
  67. int main (int argc, const char * argv[])
  68. {
  69.    function func;
  70.    func = val(3) + val(2);
  71.  
  72.    std::cout << func() << std::endl;
  73. }


 
Les appels de getNode() seront inliné corretement ou vont-ils pourrir mon code avec des appels de fonctions :sweat: (dsl mais le -s de mon gcc fait n'imp. je peut pas verifier) ???

mood
Publicité
Posté le 04-11-2003 à 09:03:09  profilanswer
 

n°558354
*syl*
--&gt; []
Posté le 04-11-2003 à 09:05:14  profilanswer
 
n°558376
Joel F
Real men use unique_ptr
Posté le 04-11-2003 à 09:39:55  profilanswer
 

Ok, je vois, je vais creuser cette histoire :sweat:

n°558380
nraynaud
lol
Posté le 04-11-2003 à 09:45:28  profilanswer
 

Je pense que la règle de faisabilité est simple, il faut qu'au point d'appel de la méthode virtuelle, on conaisse le type exact de l'objet avec certitude. Si on a déjà pas ça, on est obligé de faire de la liaison retardée.
 
Je ne pense pas que les templates entrent en ligne de compte.


---------------
trainoo.com, c'est fini
n°558427
Joel F
Real men use unique_ptr
Posté le 04-11-2003 à 11:00:17  profilanswer
 

bref ... ca m'aide pas :(
 
mon probleme reste entier, screugneugneu :-/

n°558428
nraynaud
lol
Posté le 04-11-2003 à 11:02:15  profilanswer
 

en C++ y'a des techniques pour éliminer le lien dynamique, par des opérateurs de casting et de la surcharge. Par contre, l'objet tu l'oublies.


---------------
trainoo.com, c'est fini
n°558431
Joel F
Real men use unique_ptr
Posté le 04-11-2003 à 11:07:13  profilanswer
 

en fait, c'est à la base que mon problème est mal posé.
 
Comment stocké une classe du type
 
 
template<class X> class expression;
avec X tres tres complexe et innacessible à l'utiliateur dans une classe du type:
 
class function;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  template , methode virtuelle et inline

 

Sujets relatifs
Récupérer l'objet class dont dépend la méthode statique appeléetemplate, main, visual C++
Comment fait-on pour passer en parametre une fonction à une méthode ?Pointeur vers une méthode ?
compilation d'un inline ?[interrogation écrite] fonction membre template virtuelle
Methode pour modifier un enreg de MySQL ?[GCC][ASM] Assembleur inline gcc
combinaison de div inline et block 
Plus de sujets relatifs à : template , methode virtuelle et inline


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR