2010-03-26 50 views
10

Giới thiệu tốt về việc tạo ra hệ thống mẫu biểu thức C++ là gì? Tôi muốn thể hiện số học về loại người dùng xác định trong khi tránh các giá trị tạm thời (có thể lớn), và để tìm hiểu cách thực hiện điều này trực tiếp thay vì áp dụng một thư viện hiện có.Hướng dẫn và giới thiệu về Mẫu biểu thức C++

Tôi đã tìm thấy Todd Veldhuizen's original paper và ví dụ từ Josuttis C++ Templates book và bài viết theo số Kreft & Langer. Nó được đề cập trong bài giảng 6 của một khóa học trên Modern C++, đề cập trở lại Josuttis. Thư viện POOMA background giới thiệu các mẫu biểu hiện độc đáo.

Tôi đang tìm kiếm đơn giản, hiển thị rõ ràng.

+2

Tăng thư viện lambda dường như sử dụng kỹ thuật này. Từ kinh nghiệm của tôi nó rất cồng kềnh để sử dụng và vẫn còn rất nhiều hạn chế; Tôi sẽ không ngạc nhiên nếu không có giải thích đơn giản về cách thức hoạt động của nó. – liori

+0

boost :: lambda có mục đích khác so với các mẫu biểu thức. –

Trả lời

5

Bạn sẽ nhận được bản sao của C++ Templates: The Complete Guide.

Ví dụ mã mà bạn liên kết không có văn bản đi kèm, điều này khá hữu ích (chương trên mẫu biểu thức dài 22 trang). Nếu không có văn bản, tất cả những gì bạn có là mã mà không có bất kỳ bình luận hay giải thích nào về những gì nó làm và cách thức và tại sao nó lại làm như vậy.

+1

Vandevoorde và Josuttis có mô tả thực sự hoàn chỉnh. Chủ đề sẽ không bao giờ trở thành * đơn giản *, bởi vì đó là một chủ đề phức tạp và khó khăn, nhưng họ làm tốt nhất. – jwismar

0

Bạn đã có tất cả các nguồn ngoại trừ sách C++ khoa học, mà thực sự chỉ là bản gốc (viết cho chủ đề này) và khá đẹp. Bạn có thể xem C++ Template Metaprogramming để biết thêm các kỹ thuật hiện đại được xây dựng từ các ý tưởng mẫu biểu hiện, nhưng một cái gì đó "đơn giản" sẽ không sẵn sàng cho đến khi nó đơn giản.

0

Tôi khuyên bạn nên xem lại Toán tử tăng cường tại Boost Operators - Arithmetic. Đây là những phương pháp được tạo khuôn mẫu mở rộng các phép toán số học và so sánh cơ bản.

2

Tôi đặc biệt khuyến khích tìm kiếm thư viện Eric Niebler Boost.Proto. Một rất tốt các tài liệu giới thiệu có thể được tìm thấy trên C++ - tiếp theo:

http://cpp-next.com/archive/2010/08/expressive-c-introduction/

và buổi nói chuyện tại boost'con 2010 cũng là rất thú vị

6

tôi thấy Expression Templates Demystified là khá tốt giải thích. Nó bắt đầu bằng cách hiển thị cách triển khai các biểu thức toán học không có các khuôn mẫu và hiển thị các khối và khái niệm xây dựng cơ bản.

Phần thứ hai của bài viết cho thấy cách cấu trúc lại triển khai ban đầu để sử dụng các mẫu thay thế để cải thiện hiệu suất và giảm mã.

IMO, bài viết là một lựa chọn tốt cho chương mẫu biểu thức trong 'Mẫu C++: Hướng dẫn đầy đủ'.

0

cho những gì bạn muốn làm, bạn nên xem mã số Boost.ublas vì nó thực hiện chính xác điều đó.

Bắt đầu với tệp vector.hpp và sau đó quay lại cấu trúc phân cấp (cha mẹ của vector<>). Ma trận phức tạp hơn một chút nhưng cơ chế là như nhau.

Bây giờ tôi có thể khuyên bạn không nên cố gắng tái tạo sự phức tạp của thư viện như lần thử đầu tiên, như ublas_expression và những thứ tương tự. Bạn có thể làm điều đó đơn giản hơn bằng cách làm cho kiểu của bạn là đối tượng cơ sở và sau đó thực hiện toán tử nhị phân.

Xem tại đây quá: http://www.bnikolic.co.uk/blog/cpp-expression-minimal.html

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