2010-05-20 2 views

Répondre

12

Vous pouvez envelopper la fonction avec mem_fun_ref:

mem_fun_ref(&A::do_lengthy_work)(a); 

Cela peut être très utile pour les algorithmes de STL comme for_each:

std::vector<A> vec; 
std::for_each(vec.begin(), vec.end(), mem_fun_ref(&A::do_lengthy_work)); 

Si vous avez un A *, utilisez mem_fun:

std::vector<A *> vecp; 
std:for_each(vecp.begin(), vecp.end(), mem_fun(&A::do_lengthy_work)); 
2

Oui, si la méthode est déclarée static, ce qui signifie qu'il ne fait pas partie à une instance particulière de la classe.

class A { 
    public: 
    static void do_lengthy_work() { 
     cout << "working." << endl; 
    } 
}; 

A::do_lengthy_work(); 
2

Vous pourriez le faire.

static void do_lengthy_work(A& a) { 
    a.do_lengthy_work(); 
} 
2

Comme vous l'avez écrit, non, vous ne pouvez pas le faire. Vous pouvez créer une surcharge statique, bien que je déconseillerais ceci:

class A { 
    public: 
     void do_lengthy_work() { 
     cout << "working." << endl; 
     } 

     static void do_lengthy_work(A& a) { 
      a.do_lengthy_work(); 
     } 
}; 

Cependant, cela peut être source de confusion. Pourquoi veux-tu faire cela? Pourquoi ne pouvez-vous pas simplement appeler a.do_lengthy_work()?

+0

Juste curieux, parce que c'est quelque chose qui peut être fait en Python. –

Questions connexes