I am going to use LibClang as it is independent of CLang versions, you can also use LibTooling
#include<iostream>
#include<string>typedefintmy_type_t;
// Example class with some member variables and functionsclassExampleClass {
int userKurwa;
public:int publicVar;
private:float privateVar;
protected:
std::string protectedVar;
public:ExampleClass() : publicVar(0), privateVar(0.0f), protectedVar("protected") {}
~ExampleClass() {}
voidpublicFunction(int arg1, float arg2) {}
private:floatprivateFunction() { return0.0f; }
protected:voidprotectedFunction() {}
};
// Example struct with some member variables and functionsstructExampleStruct {
int publicVar;
private:float privateVar;
protected:
std::string protectedVar;
public:ExampleStruct() : publicVar(0), privateVar(0.0f), protectedVar("protected") {}
~ExampleStruct() {}
voidpublicFunction(int arg1, float arg2) {}
private:floatprivateFunction() { return0.0f; }
ExampleStruct aaa;
my_type_t bbbbb;
protected:voidprotectedFunction() {}
};
int ccccccc = 0;
intmain() {
ExampleClass obj1;
ExampleStruct obj2;
return0;
}............................................
All classes and structures contained in
#include <iostream>
#include <string>
...........................................
---
Class: ExampleClass
Attributes: ['userKurwa', 'publicVar', 'privateVar', 'protectedVar']
Methods: ['publicFunction', 'privateFunction', 'protectedFunction']
Bases: []
Is Abstract: (False,)
---
Struct: ExampleStruct
Attributes: ['publicVar', 'privateVar', 'protectedVar', 'aaa', 'bbbbb']
Methods: ['publicFunction', 'privateFunction', 'protectedFunction']
Bases: []
Is Abstract: (False,)
---