Mã nguồn của ứng dụng của chúng tôi là hàng trăm nghìn dòng, hàng nghìn tệp và ở những nơi rất cũ - ứng dụng được viết lần đầu tiên vào năm 1995 hoặc 1996. Trong vài năm qua, nhóm của tôi đã cải thiện đáng kể chất lượng của nguồn , nhưng một vấn đề vẫn còn đặc biệt là lỗi tôi: rất nhiều lớp học có rất nhiều phương pháp được xác định đầy đủ trong tập tin tiêu đề của họ.Công cụ phân tích nguồn C++ và di chuyển các phương thức nội tuyến trong tiêu đề sang tệp nguồn .cpp?
Tôi không có vấn đề gì với các phương thức được khai báo trong tiêu đề trong một số trường hợp - hàm tạo của cấu trúc, một phương pháp đơn giản trong đó nội tuyến đo được làm cho nó nhanh hơn (chúng tôi có một số hàm toán học như thế này), v.v. các phương pháp inlined không có lý do rõ ràng là:
- Messy
- Làm cho nó khó có thể tìm ra thi hành một phương pháp (đặc biệt là tìm kiếm thông qua một cây của các lớp học cho một hàm ảo, chỉ để tìm một lớp có phiên bản của nó được khai báo trong tiêu đề ...)
- Có thể làm tăng kích thước mã được biên dịch
- Có thể gây ra sự cố cho trình liên kết của chúng tôi, là notoriously flaky for large codebases. Để công bằng, nó đã tốt hơn nhiều trong vài năm qua, nhưng nó không hoàn hảo.
Lý do cuối cùng có thể gây ra sự cố cho chúng tôi và đó là lý do chính đáng để chuyển qua codebase và di chuyển hầu hết định nghĩa sang tệp nguồn.
Codebase của chúng tôi rất lớn. Có công cụ tự động nào có thể thực hiện được (hầu hết) điều này cho chúng tôi không?
Ghi chú:
- Chúng tôi sử dụng Embarcadero RAD Studio 2010. Nói cách khác, các phương ngữ C++ bao gồm VCL and other extensions vv
- Một vài tiêu đề là độc lập, nhưng hầu hết được ghép nối với một tương ứng. tệp cpp, như bạn thường làm. Ngoài phần mở rộng tên tệp là giống nhau, tức là, nếu có các phương thức được xác định trong X.h, chúng có thể được chuyển sang X.cpp. Điều này cũng có nghĩa là công cụ không phải xử lý phân tích cú pháp toàn bộ dự án - nó có thể phân tích cú pháp các cặp .cpp/.h riêng lẻ, bỏ qua bao gồm, v.v., miễn là nó có thể nhận ra một phương thức đáng tin cậy với một thân xác định trong một tuyên bố lớp và di chuyển nó.
http://stackoverflow.com/questions/6362995/c-refactoring-move-method-to-implementation-file sao chép? – Zuljin
Nhận một thực tập để làm điều đó. –
@Zuljin: hmm, có thể ... Nhưng không có câu trả lời áp dụng nào! (VS addins, không có dấu hiệu thay đổi hàng loạt trên trang web của họ và điều bình chọn cao nhất trong số tất cả các nhận xét và câu trả lời là có nội dung 'Ồ, bạn có thể dễ dàng tạo tập lệnh ...' Tôi không nghĩ 'dễ dàng' và 'parse C++' thường đi cùng nhau!) –