2010-05-20 163 views

回答

12

您可以mem_fun_ref包裹功能:

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

這是非常有用的STL算法,如for_each

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

如果你有一個A *,你會用mem_fun

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

是的,如果該方法聲明爲static,這意味着它不屬於該類的特定實例。

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

A::do_lengthy_work(); 
2

你可以這樣做。

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

你寫的方式,你不能這樣做。您可以創建靜態超載,但我會反對這項建議:

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

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

然而,這可能會造成混淆。你爲什麼想這樣做?你爲什麼不能直接致電a.do_lengthy_work()

+0

只是好奇,becau這是可以用Python完成的事情。 – 2010-05-20 01:07:14

相關問題