2012-12-12 44 views
46

Cho một lớp mẫu như sau:Làm thế nào để chuyển tiếp khai báo một lớp mẫu C++?

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

Làm thế nào ai đó có thể chuyển tiếp tuyên bố lớp này trong một tập tin tiêu đề?

+12

Không biết tại sao điều này bị đóng - câu hỏi được liên kết tương tự nhưng khác nhau. Đó là một trong những giao dịch với các mẫu tuyên bố về phía trước trong không gian tên 'std'. Câu hỏi này tổng quát hơn và có câu trả lời được đánh giá cao nhất. Tôi đã bỏ phiếu để mở lại. –

Trả lời

65

Đây là cách bạn sẽ làm điều đó:

template<typename Type, typename IDType=typename Type::IDType> 
class Mappings; 

template<typename Type, typename IDType> 
class Mappings 
{ 
public: 
    ... 
    Type valueFor(const IDType& id) { // return value } 
    ... 
}; 

Lưu ý rằng mặc định là trong tờ khai về phía trước và không nằm trong định nghĩa thực tế.

6

Bạn có thể khai báo đối số mặc định cho mẫu chỉ cho lần khai báo đầu tiên của mẫu. Nếu bạn muốn cho phép người dùng chuyển tiếp khai báo mẫu lớp, bạn nên cung cấp tiêu đề chuyển tiếp. Nếu bạn muốn chuyển tiếp tuyên bố mẫu lớp của người khác bằng cách sử dụng mặc định, bạn đã hết may mắn!

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