Tôi đang đọc Scott Meyers 'Effective C++. Anh ấy đang nói về các đặc điểm, tôi hiểu rằng tôi cần chúng để xác định loại đối tượng trong suốt thời gian biên soạn, nhưng tôi không thể hiểu được lời giải thích của anh ta về những gì các lớp này thực sự làm? (từ quan điểm kỹ thuật)các lớp đặc điểm hoạt động như thế nào?
Trả lời
Có lẽ bạn đang mong đợi một loại phép thuật nào đó làm cho các đặc điểm kiểu hoạt động. Trong trường hợp đó, hãy thất vọng - không có phép thuật. Loại đặc điểm là theo cách thủ công được xác định cho từng loại. Ví dụ: xem xét iterator_traits
, cung cấp typedef (ví dụ: value_type
) cho trình lặp.
Sử dụng chúng, bạn có thể viết
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
Nhưng để làm cho công việc này, có thực sự là một định nghĩa rõ ràng đâu đó trong <iterator>
tiêu đề, mà đọc một cái gì đó như thế này:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
Đây là một chuyên môn từng phần của loại iterator_traits
cho các loại biểu mẫu T*
, tức là con trỏ của một số loại chung chung.
Trong cùng một mạch, iterator_traits
chuyên dùng cho các trình lặp khác, ví dụ: typename vector<T>::iterator
.
Lớp học nâng cao làm không xác định loại đối tượng. Thay vào đó, chúng cung cấp thông tin bổ sung về một loại, thường bằng cách xác định typedefs hoặc hằng số bên trong đặc điểm.
+1 để kết hợp hiệu quả lý thuyết và triển khai. –
- 1. Các lớp thuộc tính hoạt động như thế nào?
- 2. Điểm chi nhánh của bwmorph hoạt động như thế nào?
- 3. loại đặc điểm đặc điểm
- 4. Trong python, lớp AutoVivification sau hoạt động như thế nào?
- 5. Lớp phủ Turbo Pascal hoạt động như thế nào?
- 6. Lớp Perl này thực sự hoạt động như thế nào?
- 7. Lớp Meta của Django hoạt động như thế nào?
- 8. weakhashmap hoạt động như thế nào?
- 9. Các trang web như livescore.com hoạt động như thế nào?
- 10. Mở rộng các đặc điểm với các lớp trong PHP?
- 11. LINQ - nó hoạt động như thế nào?
- 12. Các lớp trừu tượng trong Scala có thực sự hoạt động tốt hơn các đặc điểm không?
- 13. Hàng đợi.js hoạt động như thế nào?
- 14. Dropbox hoạt động như thế nào?
- 15. Apache Cassandra hoạt động như thế nào?
- 16. Tự động tải các đặc điểm trong PHP
- 17. InputStreamReader.close() hoạt động như thế nào?
- 18. Firebug hoạt động như thế nào?
- 19. Danh mục hoạt động như thế nào?
- 20. RedirectToRouteResult hoạt động như thế nào?
- 21. DataReader hoạt động như thế nào?
- 22. DirectX - VertexBuffer hoạt động như thế nào?
- 23. Các trường mô hình Django hoạt động như thế nào?
- 24. delegate.Invoke hoạt động như thế nào?
- 25. Biến động thực sự hoạt động như thế nào?
- 26. Các biểu thức lambda hoạt động như thế nào?
- 27. C# Events hoạt động như thế nào?
- 28. aspx.designer.cs nó hoạt động như thế nào?
- 29. Form.reset() hoạt động như thế nào?
- 30. PyArg_ParseTupleAndKeywords hoạt động như thế nào?
+1 không có phép thuật. Mặc dù, không có một số đặc điểm (ví dụ: trong thư viện chuẩn C++ 0x) không thể được xác định một cách đáng tin cậy chỉ bằng ngôn ngữ và cần sự trợ giúp đặc biệt "ma thuật" từ trình biên dịch để hoạt động? – UncleBens
@UncleBens: Tôi không biết những đặc điểm nào C++ 0x xác định nhưng tôi chắc chắn rằng không có những đặc điểm như vậy tồn tại trước C++ 0x. –
Bây giờ không phải là * một loại ma thuật hoạt động trong ['std :: bases_type'] (http://en.cppreference.com/w/cpp/types/underlying_type)? – Wolf