Kompletní seznam metod objektu v C++

Waseihou

Kompletní seznam metod objektu v C++
« kdy: 11. 02. 2014, 22:41:54 »
Ahoj, potřeboval bych něco, co by extrahovalo kompletní "interface" classy v C++ která bude mít všechny metody jako nějaká jiná classa, a to včetně metod jejich předků a včetně multiple inheritance.

Např. mějme classu která je zděděná z templaty která dědí z MFC třídy a chci udělat stub pro linux verzi aby se to dalo zkompilovat, ale nechci case-by-case řešit kdo co všechno to volá - prostě kompletní interface.

Moc jsem nad tím nepřemýšlel, asi by šlo udělat nějaký skript, ale neví někdo o hotovém řešení? Prostě prográmek který když pustím na zdroják a zadám jméno classy tak to vyextrahuje/vygeneruje. Mělo by to obsahovat public a protected metody, tudíž to co může být voláno a nebo přetžíženo v potomku kde může být nějaká ta "kustomizace".
« Poslední změna: 12. 02. 2014, 09:12:54 od Petr Krčmář »


noname

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #1 kdy: 11. 02. 2014, 23:48:54 »
Ahoj, potřeboval bych něco, co by extrahovalo kompletní "interface" classy v C++ která bude mít všechny metody jako nějaká jiná classa, a to včetně metod jejich předků a včetně multiple inheritance.

Např. mějme classu která je zděděná z templaty která dědí z MFC třídy a chci udělat stub pro linux verzi aby se to dalo zkompilovat, ale nechci case-by-case řešit kdo co všechno to volá - prostě kompletní interface.

Moc jsem nad tím nepřemýšlel, asi by šlo udělat nějaký skript, ale neví někdo o hotovém řešení? Prostě prográmek který když pustím na zdroják a zadám jméno classy tak to vyextrahuje/vygeneruje. Mělo by to obsahovat public a protected metody, tudíž to co může být voláno a nebo přetžíženo v potomku kde může být nějaká ta "kustomizace".

A nezvládl by něco takového v základu Doxygen? Jako člověk, který mu prozatím nerozumí tak, jak by potřeboval sice nechci dělat konečné soudy, ale nedal by se nastavit tak, aby jednoduše vypsal jméno třídy a k němu všechny funkce s tím, že k nim nedopíše dokumentaci, protože k ní nemá příslušný komentář?

Sten

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #2 kdy: 12. 02. 2014, 00:45:10 »
Parsování C++ je velice složité, takže na to nebude jenom jednoduchý skript. Nicméně jde použít existující nástroje, třeba GCCXML (ano, používá to GCC pro generování XML rozhraní :-) ), šlo by použít rozhraní pro statické analyzátory v Clangu anebo vytáhnout parser z Doxygenu (i když ten pro tento účel asi nebude moc spolehlivý).

JS

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #3 kdy: 12. 02. 2014, 06:13:24 »
Parsování C++ je velice složité, takže na to nebude jenom jednoduchý skript. Nicméně jde použít existující nástroje

To zni jako dobry napad, nebo se podivat na http://www.swig.org/

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #4 kdy: 12. 02. 2014, 06:58:02 »
jestli někdo píše generátor wraperů, jsem první zákazník. V C++ mi tahle vlastnost chybi uz hrozně dlouho (moznost generikou generovat metody ktere nejsou deklarované na třídě podle jiného rozhraní a jejich vykonáni prostým delegováním pres pointer)


Jakub Galgonek

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #5 kdy: 12. 02. 2014, 08:17:57 »
Např. mějme classu která je zděděná z templaty která dědí z MFC třídy a chci udělat stub pro linux verzi aby se to dalo zkompilovat,

Pokud jde o to jen to zkompilovat, nestačilo by použít winelib?

Ovrscout

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #6 kdy: 12. 02. 2014, 09:02:41 »
Pokud hledáte parser, skuste kouknout na http://clang.llvm.org/docs/Tooling.html
Je to knihovna parseru který používá překladač clang takže by to mělo být kompletní co se týká vlastností, metod atd.
Nemám s tím přímou zkušenost ale chlubí se tam že je to "relativně" snadné na použití :)

Ovrscout

Re:Jak vytáhnout kompletní seznam metod objektu v C++?
« Odpověď #7 kdy: 12. 02. 2014, 09:05:12 »
"Zkuste"  samozřejmně. Bez ranní kávy raději nikam nic nepsat.