Kod źródłowy naszej aplikacji to setki tysięcy linii, tysiące plików, a w miejscach bardzo starych - aplikacja została napisana po raz pierwszy w 1995 lub 1996 roku. W ciągu ostatnich kilku lat mój zespół znacznie poprawił jakość źródła , ale pozostaje jeden problem, który szczególnie mnie budzi: wiele klas ma wiele metod w pełni zdefiniowanych w ich pliku nagłówkowym.Narzędzie do parsowania źródła C++ i przenoszenia metod inline w nagłówku do pliku źródłowego .cpp?
nie mam problemu z metod zadeklarowanych inline w nagłówku w niektórych przypadkach - konstruktora struct, w prosty sposób, w którym inline wymiernie czyni go szybciej (mamy kilka funkcji matematycznych, takich jak ta) itp Ale liberalne stosowanie z inlined metod bez wyraźnego powodu jest:
- Messy
- sprawia, że trudno znaleźć wdrożenie metody (zwłaszcza wyszukiwanie poprzez drzewa zajęć dla funkcji wirtualnego, aby znaleźć jeden klasa miała swoją wersję zadeklarowane w nagłówku ...)
- Prawdopodobnie zwiększa skompilowany rozmiar kodu
- Prawdopodobnie powoduje problemy z naszym łącznikiem, który jest notoriously flaky for large codebases. Aby być uczciwym, w ciągu ostatnich kilku lat jest znacznie lepiej, ale nie jest doskonały.
Ten ostatni powód może być teraz przyczyną problemów i jest to dobry powód, aby przejść przez kod i przenieść większość definicji do pliku źródłowego.
Nasza baza kodów jest ogromna. Czy istnieje zautomatyzowane narzędzie, które może zrobić (większość) tego dla nas?
Uwagi:
- Używamy Embarcadero RAD Studio 2010. Innymi słowy, dialekt C++ zawiera VCL and other extensions itp
- Kilka nagłówki są samodzielne, ale większość z nich w połączeniu z odpowiednia. plik cpp, jak zwykle. Oprócz rozszerzenia nazwa pliku jest taka sama, tj. Jeśli istnieją metody zdefiniowane w X.h, można je przenieść do X.cpp. Oznacza to również, że narzędzie nie musi obsługiwać analizowania całego projektu - może prawdopodobnie po prostu przeanalizować pojedyncze pary plików .cpp/.h, zignorować załączniki, itp., O ile może niezawodnie rozpoznać metodę z określonym obiektem w deklaracji klasowej i przenieś ją.
http://stackoverflow.com/questions/6362995/c-refactoring-move-method-to-implementation-file duplicate? – Zuljin
Uzyskaj stażystę, aby to zrobić. –
@Zuljin: hmm, możliwe ... Ale nie ma odpowiednich odpowiedzi! (Dodatki VS, bez wskazania masowych zmian na swoich stronach internetowych, a najważniejszą rzeczą spośród wszystkich komentarzy i odpowiedzi jest stwierdzenie "Och, możesz łatwo stworzyć skrypt ..." Nie sądzę, że jest "łatwy" i "parsuj C++" zwykle idą w parze!) –