2009-09-10 48 views
25

Tôi có một loạt các tệp tiêu đề C++ với các khai báo lớp và chức năng khác nhau. Cho đến nay, khi tôi viết các tệp nguồn C++ của các lớp và hàm được khai báo, tôi đã được thủ công:Tự động tạo tệp C++ từ tiêu đề?

  1. Sao chép các khai báo từ tệp tiêu đề vào tệp nguồn tương ứng.
  2. Xóa "class classname {" và matching "};"
  3. Thêm "classname ::" vào tên của tất cả các hàm lớp.
  4. Thay thế dấu chấm phẩy sau khi khai báo hàm bằng "{}".
  5. Xóa từ khóa "ảo" và "tĩnh".

Chỉ sau khi tất cả công việc đó không thực sự làm gì, tôi có thể thực sự thực hiện các chức năng không. Tôi tự hỏi nếu có một công cụ ở đó một nơi nào đó có thể tự động tạo ra một tập tin ".cpp" từ một tập tin ".h", trong đó kết quả ".cpp" chứa các phần trống cho các hàm được khai báo trong tệp ".h" (và định nghĩa nội tuyến chưa được đưa ra). Một công cụ dòng lệnh thân thiện với UNIX sẽ được ưu tiên. Cảm ơn.

CẬP NHẬT: Công cụ đa nền tảng sẽ là lý tưởng. Nếu không, tôi đang làm việc trên Mac OS X 10.6.

Trả lời

21

Lazy C++ dường như được thiết kế để giải quyết chính xác vấn đề đó.

+0

Lazy C++ có vẻ như không thể cài đặt trên Mac OS X ... đó là những gì tôi đang sử dụng. Có bất kỳ máy phát điện đa nền tảng nào mà bạn biết có thể dễ dàng được tạo từ nguồn không? –

+1

+1 Tài nguyên rất thú vị. –

+1

@Michael: Bạn có thể lấy nguồn và biên dịch chéo cho OSX, xem ví dụ: trả lời cho http: // stackoverflow.com/questions/1375201/lazy-c-chicken-and-egg-problem – moonshadow

3

eclipse CDT có tính năng "Phương pháp triển khai" chỉ hoạt động (một phương pháp tại một thời điểm). Ngoài ra còn có một "Tạo Getters và Setters" tính năng mà cũng tạo ra mã thích hợp trong các cơ quan chức năng.

+0

Cảm ơn. Tôi đang tìm một lời gọi commandline, mặc dù ... một cái gì đó mà tôi có thể sử dụng trong một "tìm" lệnh để đệ quy tạo ra ".cpp" tập tin cho tất cả các tập tin tiêu đề trong dự án của tôi. –

5

Tôi đã tìm thấy chính mình trong tình huống của bạn gần đây và đã có người viết công cụ của riêng tôi - impl_me. Đó là một tập lệnh Ruby nhỏ sử dụng SWIG làm phần cuối của trình phân tích cú pháp. Nó viết để stdout để bạn có thể kết hợp với bộ công cụ nix yêu thích của bạn find/grep/sed/awk để tinh chỉnh tùy chọn của riêng bạn.

Bởi vì nó được viết bằng Ruby, nên là nền tảng chéo. SWIG cũng là nền tảng chéo nên mọi thứ đều ổn.

Nó khá nguyên thủy ở giai đoạn này và không phải là mạnh mẽ như Lazy C++ trong phân tích các mẫu lạ và các chất liệu. Những đóng góp được chào đón :)

0

Tôi đã thử Lazy C++ nhưng dường như đã lỗi thời và không còn được duy trì nữa. Nó không hỗ trợ chuẩn C++ 14 mới nhất.

Đó là lý do tại sao tôi quyết định viết công cụ của riêng mình trong Java bằng cách sử dụng ANTLR4. Nó được gọi là Điểm số và bạn có thể tìm thấy nó tại đây: https://github.com/underrated/Score

Hiện tại nó đang ở giai đoạn trứng nước và có thể có nhiều lỗi nhưng tôi dự định cải thiện nó. Vì vậy, hãy thử nếu bạn muốn và báo cáo bất kỳ lỗi nào trên trang github của dự án. Tôi sẽ cố gắng sửa chúng càng nhanh càng tốt.

+0

Tôi không mong đợi nó xử lý điều kiện tiền xử lý tại thời điểm này nhưng tôi có kế hoạch để thêm hỗ trợ cho điều đó. Ngoài ra, công cụ này không có ý định kiểm tra ngữ nghĩa trên mã. Nó chỉ xác định các phương thức triển khai thực hiện và sau đó nó đặt các nguyên mẫu phương thức trong phần đầu và thực hiện phương thức trong tệp nguồn (cộng thêm một vài "tách biệt"). Nhà phát triển có thể đảm bảo tính chính xác của mã (ví dụ: bằng cách sử dụng IDE). Nếu mã ban đầu có lỗi cú pháp/ngữ nghĩa thì mã đó sẽ được tạo ra. Nhưng chúng có thể được tìm thấy, hoặc bằng IDE hoặc bởi trình biên dịch. –

+0

@IraBaxter Tại sao bạn cần một việc xử lý phức tạp như vậy trong bối cảnh vấn đề của Michael? Tất cả những gì anh ta cần là tự động sao chép/dán/sửa đổi một số mã. Điều trị đặc biệt cho #ifdefs thực sự là cần thiết. Các mẫu không cần phải được chạm vào, chúng có thể nằm trong tiêu đề. Các cuộc gọi macro sẽ được xem như các số nhận dạng đơn giản hoặc các cuộc gọi hàm của trình phân tích cú pháp và cũng không cần phải chạm vào. Về không gian tên, tất cả các câu lệnh "using ..." có thể nằm trong tiêu đề. Và "không gian tên ... {...}" có thể được sao chép vào cả đầu trang và tệp nguồn. Tui bỏ lỡ điều gì vậy? –

Các vấn đề liên quan