2017-10-14 66 views
2

我知道我們可以通過物體如調用類的功能,在主

object.Function1(object); 

但調用類的功能主要有調用諸如以下功能的任何方式

Function1(object); 

我不得不寫這將有一個主要功能如下

int main() { 
    Line line1(10); 
    Line line2 = line1; 
    display(line1); 
    display(line2); 
    return 0; 
    } 
+0

'std :: mem_fn'是答案,或者是lambda –

+0

使該方法成爲「靜態」方法。 –

+0

@Thomas Matthews如果我使靜態方法,我必須使用類名來調用方法 –

回答

5

我不知道W¯¯運行代碼的類HY你需要它,但你可以創建免費功能「顯示」調用方法顯示:

void display(Line& line) 
{ 
    line.display(); 
} 
int main() { 
    Line line1(10); 
    Line line2 = line1; 
    display(line1); 
    display(line2); 
    return 0; 
} 
0

在補充桑德羅的簡單而有效的建議,這裏更通用的一個,有人在評論中提到。

您可以使用mem_fn()(或如果在C++ 11之前使用較舊的C++編譯器,則爲mem_fun_ref())創建與該成員函數對應的函數對象。

的好處是,你不必擔心返回類型和參數:

class C { 
    public: 
    void x() { cout << "Yes x!"<<endl; } 
    void y(int a) { cout << "Yes y"<<a<<"!"<<endl; } 
}; 

int main() { 
    C c; 
    c.x(); 
    c.y(3); 

    auto x = mem_fn(&C::x); // function object 
    auto y = mem_fn(&C::y); 
    x(c);      // call them like a function 
    y(c,4); 

    return 0; 
} 

Online demo

不便之處在於這種輕鬆是有代價的:與桑德羅的做法,安:我對於不同的類,不會有相同函數名稱的重載。