2017-10-14 1 views
2

Aufruf weiß ich, wireine Funktion einer Klasse in der Haupt

object.Function1(object); 

Aber es gibt eine Möglichkeit, die Funktion des Aufrufs wie folgt aus einer Funktion einer Klasse in der Hauptsache durch die ein Objektes zB nennen

Function1(object); 

ich hatte eine Klasse zu schreiben, die den Code mit einer Hauptfunktion laufen würde wie folgt

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

'std :: mem_fn' ist die Antwort, oder ein Lambda –

+0

Machen Sie die Methode eine' statische' Methode. –

+0

@Thomas Matthews Wenn ich die Methode statisch mache, muss ich den Klassennamen verwenden, um die Methode –

Antwort

5

ich weiß nicht, w hy tun Sie sie brauchen, aber Sie können freie Funktion „Anzeige“ erstellen, die Methode Display ruft:

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

In Ergänzung zu Sandros einfachen, aber effizienten Vorschlag, hier eine allgemeinere ein, von jemandem in den Kommentaren erwähnt.

Sie können ein Funktionsobjekt entsprechend der Elementfunktion erstellen, indem Sie mem_fn() (oder mem_fun_ref() verwenden, wenn Sie einen älteren C++ - Compiler vor C++ 11 verwenden).

Der Vorteil ist, dass Sie müssen nicht über Rückgabetyp und Parameter Sorge:

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

Der Nachteil ist, dass diese Leichtigkeit zu einem Preis kommt: Im Gegensatz zu Sandros Ansatz, Sie couldn Für verschiedene Klassen haben Sie keine Überladungen mit demselben Funktionsnamen.

Verwandte Themen