Có thể chuyển tiếp khai báo một lớp sử dụng đối số mặc định mà không chỉ định hoặc biết các đối số đó không?Các tham số mẫu mặc định với khai báo chuyển tiếp
Ví dụ: tôi muốn khai báo một lớp boost::ptr_list<TYPE>
trong lớp Traits mà không cần kéo toàn bộ thư viện Boost vào mọi tệp bao gồm các đặc điểm. Tôi muốn tuyên bố namespace boost { template<class T> class ptr_list<T>; }
, nhưng điều đó không làm việc bởi vì nó không chính xác phù hợp với khai báo lớp đúng:
template < class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
class ptr_list { ... };
đang lựa chọn của tôi chỉ để sống với nó hoặc để xác định boost::ptr_list< TYPE, boost::heap_clone_allocator, std::allocator<void*>
trong lớp học đặc điểm của tôi không? (Nếu tôi sử dụng sau này, tôi cũng sẽ phải chuyển tiếp tuyên bố boost::heap_clone_allocator
và bao gồm <memory>
, tôi giả sử).
Tôi đã nhìn qua cuốn sách Stroustrup của, SO, và phần còn lại của mạng Internet và đã không tìm thấy một dung dịch. Thông thường mọi người lo ngại về việc không bao gồm STL và giải pháp là "chỉ bao gồm các tiêu đề STL". Tuy nhiên, Boost là một thư viện lớn hơn và biên dịch nhiều hơn, vì vậy tôi muốn bỏ nó ra, trừ khi tôi hoàn toàn phải làm vậy.
Tăng là một tập hợp hầu hết các thư viện chỉ tiêu đề. Tại sao không chỉ sử dụng những thành phần bạn cần (và phụ thuộc của chúng)? Không phải để nói rằng không có một số công việc liên quan nhưng đó là những gì chúng ta thường làm. – dirkgently
Tôi làm - ptr_list là tệp duy nhất tôi cần. Vấn đề duy nhất là một tiêu đề Boost đơn bao gồm một loạt các tiêu đề khác. Một ứng dụng đơn giản của makedepend cho thấy * chỉ * ptr_list bao gồm ít nhất 385 tệp: cấu hình của boost, chi tiết, trình lặp, mpl, tiền xử lý, phạm vi, smart_ptr, type_traits và tiện ích - để đặt tên cho các mô-đun chính. Bạn chắc chắn có thể hiểu làm thế nào tôi muốn tránh bao gồm cả những người khi tôi không phải. –
Không có thắc mắc về thời gian biên dịch tăng vọt. Có, bao gồm nhiều tệp có thể gây phiền toái. Nhưng tôi nghĩ rằng các câu hỏi đúng là: có cách nào để tìm hiểu lý do tại sao các tệp này được đưa vào không? Các tệp được bao gồm có thể được chia để chỉ những thứ cần thiết được đưa vào hay không. Có vẻ như không phải là một cách dễ dàng. –