Giới thiệu tốt nhất về lập trình siêu mẫu C ++? [đóng cửa]


112

Lập trình siêu chương trình tĩnh (hay còn gọi là "siêu lập trình mẫu") là một kỹ thuật C ++ tuyệt vời cho phép thực thi các chương trình tại thời điểm biên dịch. Một bóng đèn vụt tắt trong đầu tôi ngay khi tôi đọc ví dụ về lập trình ẩn dụ kinh điển này:

#include <iostream>
using namespace std;

template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };

template<>
struct factorial< 0 > { enum { ret = 1 }; };

int main() {
    cout << "7! = " << factorial< 7 >::ret << endl; // 5040
    return 0;
}

Nếu một người muốn tìm hiểu thêm về lập trình ẩn C ++ tĩnh, thì đâu là nguồn tốt nhất (sách, trang web, phần mềm học trực tuyến, bất cứ thứ gì)?


43
bóng đèn 'tắt' hay 'bật'?
Horseyguy

36
Tắt. Chắc chắn là tắt.
Thomas Eding

Câu trả lời:


108

[Trả lời câu hỏi của riêng tôi]

Phần giới thiệu hay nhất mà tôi tìm thấy cho đến nay là chương 10, " Lập trình siêu âm tĩnh trong C ++" từ Lập trình tạo, phương pháp, công cụ và ứng dụng của Krzysztof Czarnecki và Ulrich W. Eisenecker, ISBN-13: 9780201309775; và chương 17, "Metaprograms" của C ++ Templates: The Complete Guide David Vandevoorder và Nicolai M. Josuttis, ISBN-13: 9780201734843.

văn bản thay thế văn bản thay thế văn bản thay thế văn bản thay thế

Todd Veldhuizen có một hướng dẫn tuyệt vời ở đây .

Một nguồn tốt cho lập trình C ++ nói chung là Thiết kế C ++ Hiện đại của Andrei Alexandrescu, ISBN-13: 9780201704310. Cuốn sách này pha trộn một chút lập trình siêu mẫu với các kỹ thuật mẫu khác. Đối với lập trình siêu hình cụ thể, hãy xem phần 2.1 "Xác định thời gian biên dịch", 2.4 "Ánh xạ hằng số tích phân thành kiểu", 2.6 "Lựa chọn kiểu", 2.7 "Phát hiện khả năng chuyển đổi và kế thừa tại thời gian biên dịch", 2.9 " NullTypeEmptyType" và 2.10 "Đặc điểm kiểu ".

Tài nguyên trung cấp / nâng cao tốt nhất mà tôi đã tìm thấy là Lập trình siêu mẫu C ++ của David Abrahams và Aleksey Gurtovoy, ISBN-13: 9780321227256

Nếu bạn chỉ thích một cuốn sách, hãy tải C ++ Templates: The Complete Guide vì nó cũng là tài liệu tham khảo cuối cùng cho các mẫu nói chung.


2
Liên kết đến tác phẩm của Todd Veldhuizen đã cũ.
John R. Strohm


1
liên kết đã sửa ngay bây giờ, cảm ơn!
jwfearn

Liên kết lại bị hỏng!
Paul

1
Cảm ơn bạn @jwfearn, tôi đã đọc bài viết, mặc dù tôi thấy điều này thú vị hơn: youtube.com/watch?v=Am2is2QCvxY (nó có hai phần). Đó là một cuộc nói chuyện bởi Walter E. Brown: Modern Template Metaprogramming: Một Compendium
Paul

24

Cuốn sách Thiết kế C ++ Hiện đại của Andrei Alexandrescu bao gồm rất nhiều điều này và các thủ thuật khác để tạo mã C ++ hiện đại nhanh chóng và hiệu quả và là cơ sở cho thư viện Loki .

Cũng đáng nói là các thư viện Boost , sử dụng rất nhiều các kỹ thuật này và thường có chất lượng rất cao để học hỏi (mặc dù một số thư viện khá dày đặc).


12

Modern C ++ Design , một cuốn sách và khuôn khổ thiết kế tuyệt vời của Alexandrescu. Lời cảnh báo, sau khi đọc cuốn sách này, tôi đã ngừng làm C ++ và nghĩ rằng "Cái quái gì vậy, tôi có thể chọn một ngôn ngữ tốt hơn và tải nó miễn phí".


5
"Cái quái gì vậy, tôi có thể chọn một ngôn ngữ tốt hơn và tải miễn phí" Ummm, ý bạn là gì? Tôi đặc biệt bối rối bởi "miễn phí". Và bạn đã nghĩ đến ngôn ngữ nào khác?
Pop Catalin 21/09/08

12
Lập trình siêu mẫu C ++ cung cấp cho bạn tất cả các loại khả năng mới như truyền các loại hoặc danh sách các loại làm đối số, v.v. Hầu hết các khả năng này đều có trong các ngôn ngữ được nhập động như python, với cú pháp đẹp hơn.
Florian Bösch 23-08

1
Nếu bạn đang tìm kiếm một ngôn ngữ mà bạn có thể viết các chương trình chính xác một cách nhanh chóng, thì Python tốt hơn C ++. Nếu bạn cần một số thứ khác mà C ++ cung cấp, việc thêm khả năng giống như Lisp vào C ++ có thể tốt hơn là cố gắng sử dụng C ++ - ify là một ngôn ngữ khác.
David Thornley

6

Hai cuốn sách hay khiến bạn nhớ đến là:

  • Thiết kế C ++ hiện đại / Andrei Alexandrescu (Nó thực sự đã 7 tuổi mặc dù có tên!)
  • C ++ Templates: The Complete Guide / Vandevoorde & Josuttis

Đó là một lĩnh vực khá chuyên sâu, vì vậy một cuốn sách hay như một trong số này chắc chắn được giới thiệu trên các trang web. Một số kỹ thuật nâng cao hơn sẽ yêu cầu bạn nghiên cứu mã một thời gian để tìm ra cách chúng hoạt động!


5

C ++ hiện đại là một trong những phần giới thiệu hay nhất mà tôi đã đọc. Nó bao gồm các ví dụ hữu ích thực tế về lập trình siêu mẫu. Cũng hãy xem thư viện đồng hành Loki .


5

Sẽ không có một danh sách nhiều sách, vì danh sách những người có nhiều kinh nghiệm bị hạn chế. Lập trình siêu mẫu bắt đầu thành hiện thực vào khoảng Hội thảo Lập trình Mẫu C ++ đầu tiên vào năm 2000, và nhiều tác giả có tên cho đến nay đã tham dự. (IIRC, Andrei thì không.) Những người tiên phong này ảnh hưởng rất nhiều đến lĩnh vực này, và về cơ bản những gì nên viết bây giờ đã được viết. Về mặt cá nhân, tôi muốn khuyên Vandevoorde & Josuttis. Alexandrescu's là một cuốn sách khó nếu bạn mới tham gia lĩnh vực này.


4

Giấy tờ gốc của Veldhuizen là tốt. Nếu bạn muốn mua cả một cuốn sách, thì hãy có cuốn sách "Hướng dẫn hoàn chỉnh các mẫu C ++" của Vandevoorde. Và khi bạn đã sẵn sàng cho khóa học thạc sĩ, hãy thử Thiết kế C ++ Hiện đại của Alexandrescu.


4

google Alexandrescu, Thiết kế C ++ hiện đại: Áp dụng các mẫu thiết kế và lập trình chung

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.