Các mẫu C ++ của Nhật Bản: Hướng dẫn đầy đủ Hướng dẫn (c) 2002 - cập nhật với C ++ 11?


10

Cuốn sách Các mẫu C ++: Hướng dẫn hoàn chỉnh , (c) 2002, trông rất hấp dẫn đối với tôi, nhưng khi nó 12 tuổi, tôi lo ngại nó có thể đã lỗi thời. Có một số đánh giá rất thuận lợi của Amazon được đề cập gần đây như một năm trước và tôi không thấy bất kỳ tiêu đề nào gần đây khác trên các mẫu C ++. Có ai biết liệu một cuốn sách về các mẫu được xuất bản năm 2002 (trái ngược với một cuốn sách cụ thể về STL) sẽ có cú pháp hoặc các khái niệm đã được thay thế hoặc thêm vào bởi, C ++ 11 không?

Sau đây là từ mô tả cuốn sách Amazon :

Mẫu là một trong những tính năng mạnh mẽ nhất của C ++, nhưng chúng thường bị bỏ qua, hiểu lầm và sử dụng sai. Mẫu C ++: Hướng dẫn hoàn chỉnh cung cấp cho các kiến ​​trúc sư và kỹ sư phần mềm hiểu rõ lý do tại sao, khi nào và làm thế nào để sử dụng các mẫu để xây dựng và bảo trì phần mềm sạch hơn, nhanh hơn và thông minh hơn hiệu quả hơn.

Mẫu C ++ bắt đầu với một hướng dẫn sâu sắc về các khái niệm cơ bản và các tính năng ngôn ngữ. Phần còn lại của cuốn sách đóng vai trò là tài liệu tham khảo toàn diện, trước tiên tập trung vào các chi tiết ngôn ngữ, sau đó là một loạt các kỹ thuật mã hóa, và cuối cùng là các ứng dụng nâng cao cho các mẫu. Các ví dụ được sử dụng trong suốt cuốn sách minh họa các khái niệm trừu tượng và thể hiện các thực tiễn tốt nhất.

Độc giả tìm hiểu

  • Các hành vi chính xác của mẫu
  • Làm thế nào để tránh những cạm bẫy liên quan đến các mẫu
  • Thành ngữ và kỹ thuật, từ cơ bản đến không có giấy tờ trước đây
  • Cách sử dụng lại mã nguồn mà không đe dọa hiệu suất hoặc an toàn
  • Cách tăng hiệu quả của các chương trình C ++
  • Cách sản xuất phần mềm linh hoạt và dễ bảo trì hơn

2
Vì bản thân ngôn ngữ C ++ chỉ thay đổi chậm (những thay đổi lớn chỉ được thực hiện sau mỗi 10 năm) và phần lớn vẫn tương thích ngược, nên những cuốn sách về C ++ cũng không quá nhanh.
Bart van Ingen Schenau

Câu trả lời:


12

Cập nhật (2016/08/24)

Bài viết được đề xuất tập trung vào C ++ 11:

Giới thiệu về khái niệm SFINAE của C ++: hướng nội thời gian biên dịch của một thành viên trong lớp (Jean Guegant)


Là một người học về C ++ Mẫu Metaprogramming vài tháng trước, tôi vẫn khuyên bạn nên đọc cuốn sách này.

Nó không bao gồm C ++ 11, nhưng nó đưa ra cú pháp và thông số kỹ thuật của C ++ về cách trình biên dịch nên xử lý mã mẫu. Cuốn sách bao gồm rất nhiều góc ít được biết đến sẽ trở nên quan trọng nếu bạn cần sử dụng các mẫu C ++ một cách đáng kể, cho dù có liên quan đến siêu lập trình hay không.


Các phần còn thiếu từ C ++ 11 là:


Có một cấu trúc mà bạn sẽ thấy rất nhiều mã được dán vào Stackoverflow : std::enable_if. Tuy nhiên, trong thực tế, tôi thấy điều này khá khó sử dụng, vì Quy tắc một định nghĩa và SFINAE. Đây là lý do tại sao cuốn sách này là quan trọng, bởi vì nó đi qua những điều cơ bản.


Nếu bạn sử dụng các mẫu C ++ đáng kể trong một thư viện đa nền tảng, bạn sẽ cần phải kiểm tra biên dịch mã của mình trong các trình biên dịch khác nhau. Điều này là do mỗi trình biên dịch có mức độ tuân thủ khác nhau đối với đặc tả C ++. Mã biên dịch tốt trên cái này có thể bị loại bỏ bởi cái kia và đôi khi trình biên dịch chấp nhận nó là mã phá vỡ đặc tả.


Đây là ghi chú đọc của tôi khi tôi đi qua cuốn sách này. Hy vọng nó sẽ hữu ích.

Ghi chú đọc sách - Mẫu C ++ - Hướng dẫn hoàn chỉnh (2003)

  • Ch 2.5 - Mẫu chức năng - Tóm tắt
    • Giải quyết quá tải và thực hành tốt nhất
  • Ch 3.3 - Chuyên môn hóa các mẫu lớp
  • Ch 3,4 - Chuyên ngành một phần
    • Sự mơ hồ (lỗi ODR) và cách giải quyết nó. ODR = Quy tắc một định nghĩa
  • Ch 4.3 - Hạn chế đối với tham số mẫu không loại
    • Ví dụ: chuỗi ký tự có liên kết ngoài
  • Ch 5 và Ch 6 - Hai chương này rất buồn. Bạn có thể muốn bỏ qua nó và sau đó quay lại khi bạn sẵn sàng cho việc sử dụng các mẫu.

  • Phần II (Ch 8 - Ch ???) Phần của công cụ nâng cao.

  • Ch 8 - Thêm quy tắc

    • Đối với một lập trình viên đã quen thuộc với toàn bộ Ch 3 (mẫu lớp - cơ bản), Ch 8.1 và 8.2 phải được đọc ngay sau Ch 3, bởi vì các quy tắc bổ sung cũng quan trọng và phù hợp như các quy tắc cơ bản. Điều này sẽ tiết kiệm một số nỗi đau.
  • Ch 8.3.1 (Trang 106 in lần thứ 12) lần đầu tiên đề cập đến SFINAE.

  • Ch 8.3 - Phần này giới thiệu rất nhiều tình huống trong đó việc thay thế đối số khuôn mẫu sẽ dẫn đến việc mở rộng cú pháp vô nghĩa (và do đó trở nên không hợp lệ, do đó cần phải có SFINAE). Chương này có một đường cong học tập dốc ngay cả đối với các lập trình viên C ++ có kinh nghiệm.
  • Ch 11 - Khấu trừ đối số mẫu

    • Ch11 chứa một số ví dụ Khấu trừ đối số mẫu có thể cần thiết để hiểu một số ứng dụng SFINAE bị tước đoạt tương tự.
  • Ch 12.4 trở đi - Chuyên môn hóa mẫu lớp.

    • Điều này bao gồm các cơ chế bên trong thường được yêu cầu trong một ứng dụng SFINAE.

Phần III (Ch 17 - Ch ???) Siêu lập trình.

  • Ch 17 - Bắt đầu với chương trình chức năng giới thiệu.

  • Ứng dụng. A.3 - Quy tắc một định nghĩa (ODR) chi tiết.


3
Vấn đề với thảo luận về TMP trước C ++ 11 là nó sẽ không bao gồm constexprvà do đó sẽ đề xuất TMP cho tất cả các chương trình siêu lập trình, ngay cả trong trường hợp các constexprchức năng và loại sẽ phù hợp hơn nhiều.
Ben Voigt
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.