Có bất kỳ vấn đề nào có thể làm cho hệ thống tạo mã mẫu T4 của MS không phù hợp để tạo mã C++ không?Mẫu T4 - thích hợp để tạo mã C++?
Trả lời
Nó có thể tạo bất kỳ văn bản nào bạn muốn, bao gồm cả mã C++.
câu trả lờiMột chút dài nhưng tôi nghĩ rằng một số có thể tìm thấy nó thú vị
tôi sẽ nói T4 là tuyệt vời để tạo ra C++ với
Một số có thể đáp lại rằng C++ đã có các công cụ để làm lập trình meta với như:
các Preprocessor
Sử dụng tiền xử lý và macro bậc cao bạn có thể đạt somewha t những gì bạn có thể làm với T4, nhưng tôi nói có một số lợi ích khá thuyết phục của T4:
- Các mã được tạo từ T4 rất dễ dàng để gỡ lỗi và hiểu
- Lập trình meta với T4 là đơn giản hơn so với các tiền xử lý. Bộ tiền xử lý có thể thực hiện các macro như max/min dễ dàng nhưng khi chúng ta nói về các mẫu được định hướng mô hình sẽ khó khăn
- T4 mạnh hơn bộ tiền xử lý giúp việc phát triển các mẫu
- T4 có thể được thực hiện như một phần của xây dựng quy trình hoặc theo yêu cầu
phần mẫu chuyên môn
tôi yêu một phần thủ đoạn mẫu chuyên môn nhưng tôi nói từ kinh nghiệm mà không phải ai cũng yêu thương duy trì chúng.
Tôi luôn cố gắng giảm bớt sự dư thừa mã trong nỗ lực tăng khả năng bảo trì. Ngoài ra, tôi thích các lỗi biên dịch hơn các lỗi thời gian chạy khi có thể. Vì vậy, sau khi đọc Modern C++ của Andrei Alexandrescu tôi nghĩ tôi đã tìm thấy câu trả lời .
Tôi đã viết một thành phần lấy cảm hứng từ cuốn sách này có tác dụng tuyệt vời, sau đó tôi đã đi nghỉ. Khi tôi trở lại, đội đã ném ra thành phần và viết lại bằng cách sử dụng các kỹ thuật truyền thống. Nó chứa nhiều mã hơn, được buggier và đã không thực hiện tốt tuy nhiên họ không thể tìm cách thêm các chức năng cho các thành phần tôi đã viết và xác định họ đã làm điều này. Không có gì có thể được cứu vớt. Đây cũng là những người thông minh.
Họ có làm sai không? Về khả năng bảo trì, tôi sẽ nói rằng họ đã lựa chọn đúng mặc dù nó làm tôi buồn.
Quan điểm của tôi với anechdote này là T4 có một số lợi ích trên một phần thủ đoạn mẫu chuyên môn:
- Các mã được tạo từ T4 rất dễ dàng để gỡ lỗi và hiểu
- T4 là đơn giản
- T4 là hơn mạnh mẽ
- T4 có thể được thực hiện một phần của quá trình xây dựng hoặc theo yêu cầu
- Nếu người bảo trì có thể quay đầu quanh mẫu T4, họ vẫn có thể cứu vãn mã (bắt đầu mai ntaining mã được tạo ra và vứt bỏ mẫu). Điều đó không thể thực hiện được trong bài diễn văn ở trên.
Tất nhiên trong C++ Lập trình meta là sự kết hợp giữa chuyên gia tiền mẫu và chuyên môn mẫu từng phần.
Nhược điểm
Có nhược điểm với T4 tất nhiên;
- Đây là Visual Studio cụ thể (hoặc Mono cụ thể). Tuy nhiên, mã được tạo ra tất nhiên có thể được thực hiện để có thể đồng bộ hóa bởi GCC và những người khác.
- Đó là các tiêu chuẩn không chuẩn
- Visual Studio C++ dường như không hỗ trợ T4 khiến tôi sử dụng dự án .NET giả tạo để tạo đoạn mã.
Kết thúc
Tất cả trong tất cả những gì đã mất hứng thú làm tiên tiến Lập trình meta C++ sử dụng thủ thuật lạ mắt với Preprocessor hoặc hệ thống kiểu (Tôi sử dụng chúng cho các nhiệm vụ đơn giản mặc dù) và dựa vào T4 cho những ngày này.
Nếu có ai quan tâm đến mẫu về cách thực hiện trong C++, bạn có thể xem InteractiveGraphics. Đó là một thư viện cho C#, VB, PowerShell và SmallBasic để làm đồ họa đơn giản. Ở đó tôi sử dụng T4 để tạo tất cả các API và mã soạn sẵn để chuyển tin nhắn giữa .NET và C++ (Tôi không sử dụng C++/CLI nếu tôi có thể tránh nó tất cả) từ Mô hình mô tả API. Việc thêm một phương thức mới sau đó đơn giản như mở rộng mô hình và tạo lại tất cả các tệp temlate, sau đó tôi thực hiện một phương thức trừu tượng trong C++ và thực hiện các công cụ thú vị.
Cảm ơn - một ví dụ về việc tạo ra C++ bằng cách sử dụng T4 khá nhiều câu trả lời cho câu hỏi của tôi với một Có :). – mackenir
Vâng. Câu hỏi ngớ ngẩn mà tôi cho là vậy. Mặc dù tôi đã thấy rằng bạn có thể chỉ định rằng ngôn ngữ mẫu là VB hoặc C#. Điều này liên quan đến việc tự động biên dịch đầu ra của mẫu? – mackenir
Các mẫu của bạn được tạo bằng C# hoặc VB nhưng tôi không nghĩ rằng điều này có liên quan đến đầu ra. –