2014-04-02 16 views
5

Trong C++ chuẩn 11 (khoản 3.3.9/3) tôi tìm thấy đoạn mã này:tên thực thể như con trỏ đến T trong danh sách tham số mẫu

template<class T, T* p, class U = T> class X { /∗ ... ∗/ }; 

Ai có thể giải thích cho tôi biết là có thể (và hữu ích) mã có thể chứa trong nội dung của lớp X? Sử dụng thông số p ofcourse.

+4

IMHO đoạn mã chỉ ở đó để chứng minh rằng thông số mẫu có thể phụ thuộc vào thông số mẫu trước. –

+0

@ πάντα ῥεῖ, tôi biết. Nhưng khi tôi nhìn thấy con trỏ như tên tham số mẫu tôi nghĩ: "Trong trường hợp này có thể hữu ích"? và không thể tìm thấy câu trả lời ngoại trừ như thế này: 'constexpr T * ptr = nullptr;' và sau đó sử dụng 'ptr' làm tham số. – alexolut

+0

Có hoặc bất kỳ địa chỉ liên tục hợp lý và hợp lệ nào khác (xem xét chuyển sang kim loại trần, ví dụ: giao diện bus mở rộng, v.v.). –

Trả lời

2

Nếu foo là đối tượng toàn cầu thuộc loại T, bạn có thể chuyển một con trỏ tới foo tới template class X.

Ví dụ: giả sử Tostream. Tôi có thể tạo hai loại ghi nhật ký, dựa trên loại đầu ra bị lỗi hoặc lỗi. Phương pháp static của họ thậm chí có thể làm điều đó.

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