programming bash c++

Trovare tutte le classi in un progetto C++

Spesso mi trovo a dover creare un file prerequisites.h da mettere nella cartella base di un progetto per le forward declaration.

Premesso che dichiaro le classi in questo modo:

class MyClass {

Oppure così, se ereditano altre classi:

class MyClass: public OtherClass {

Così mi sono creato velocemente uno script per generare un elenco di tutte le classi in un progetto. L'ho provato con bash e zsh ma dovrebbe funzionare anche con altre shell simili.

grep class ./ -R | grep ' {' | sed 's/.*class\ //' | sed 's/\ {//' | sed 's/:.*//' | sort -u

Va eseguito dalla cartella del progetto. Trova tutte le dichiarazioni di class, seguite dalla graffa { (per ignorare altre forward declaratiion). Quindi elimina tutto ciò che non è il nome della classe.

A questo punto è sufficiente aggiungere sed 's/\(.*\)/class \1;/' alla fine pergenerare il codice da mettere in prerequisites.h:

grep class ./ -R | grep ' {' | sed 's/.*class\ //' | sed 's/\ {//' | sed 's/:.*//' | sort -u | sed 's/\(.*\)/class \1;/'

Un'alternativa può essere anche questo, che cerca { oppure : nel caso le classi ereditate fossero abbastanza da far andare a capo la graffa (non ho mai righe maggiori di 80 caratteri, alla vecchia maniera)

grep class ./ -R | grep '[{:]' | sed 's/.*class\ //' | sed 's/\ {//' | sed 's/:.*//' | tr -d \; | sort -u | sed 's/\(.*\)/class \1;/'

Ti è piaciuto l'articolo? Condividilo! Commentalo!

comments powered by Disqus