Ruft die Liste der Methoden einer Klasse ab

8

Gibt es eine Möglichkeit, eine Liste (z. B. ein Array) von Zeigern für jede Methode einer C ++ - Klasse zu erstellen?

Etwas wie Type.GetMethods() im .NET-Framework, aber nur Standard-C ++ verwenden.

    
Federico klez Culloca 19.08.2010, 21:47
quelle

7 Antworten

6

Nein, das ist nicht generell möglich. C ++ hat nicht die gleiche Metadaten-Infrastruktur wie .NET.

Können Sie uns ein Szenario geben, in dem Sie diese Informationen verwenden möchten? Möglicherweise gibt es einen besseren Ansatz, den Sie mit C ++ verwenden können

    
JaredPar 19.08.2010, 21:49
quelle
3

Es gibt keinen Weg.

Tatsächlich kann sogar auf der Objektcodeebene eine statische Klassenmemberfunktion nicht von einer eigenständigen Funktion oder einer Klasseninstanzfunktion von einer Standalone-Funktion unterschieden werden, die einen Zeiger auf ein Objekt übergibt.

Wenn Sie Ihr Namensschema für Compiler kennen und Zugriff auf den Code des vorverknüpften Objekts hatten, können Sie es möglicherweise entschlüsseln, aber das ist eine Menge Arbeit für fehlerhafte Ergebnisse.

    
James Curran 19.08.2010 22:19
quelle
2

Erstellen Sie eine Kopie der .h-Datei und hacken Sie sie in einem Editor ab.

Nein, es gibt keine Möglichkeit, dies automatisch zu tun.

    
Mark Ransom 19.08.2010 21:49
quelle
2

In meinem Projekt verwende ich dann spezielle Makros für Deklaration und Definition von Klassenmitgliedern Ich kann die Liste der Klassenmitglieder bekommen. Zum Beispiel:

Klassendeklaration:

%Vor%

Klassendefinition:

%Vor%     
gomons 11.09.2013 18:24
quelle
1

Wenn Sie wirklich das wollen, Kapitel 8 von Fortgeschrittenen C ++ - Programmierstilen und Idiomen von James Coplien (wahrscheinlich schon lange vergriffen, aber ich höre Neil wäre bereit, seine Kopie billig zu verkaufen) deckt die Programmierung mit "Exemplaren" in C ++ ab. Machen Sie sich nichts vor, die Fähigkeit ist nicht kostenlos, aber sie kann metaklassähnliche Fähigkeiten in C ++ bereitstellen.

Ich kann mich nicht daran erinnern, wie er die besondere Fähigkeit, die man in einer seiner Klassen sucht, aufgebaut hat, aber es ist lange her, dass ich dieses Buch auch nur sorgfältig gelesen habe. Es ist immer möglich , dass es überhaupt nicht möglich ist, aber ich denke, es würde funktionieren, wenn Sie mit den anderen Einschränkungen dessen, was er offenbart, leben können.

    
Jerry Coffin 19.08.2010 22:40
quelle
0

Es gibt keine Meta-Klassen in C ++, nur Objekte und Klassen, daher kann keine Reflexion beteiligt sein, daher lautet die Antwort nein.

    
Artem Barger 19.08.2010 21:49
quelle
0

Sie können die Typinformationen mit typeid erhalten, aber nicht mit den Methodeninformationen.

    
Preet Sangha 19.08.2010 21:51
quelle

Tags und Links