2010-07-20 14 views
38

Tôi muốn làm như sau:Mẫu người bạn

template <typename T> 
struct foo 
{ 
    template <typename S> 
    friend struct foo<S>; 

private: 
    // ... 
}; 

nhưng trình biên dịch của tôi (VC8) cuộn cảm trên nó:

error C3857: 'foo<T>': multiple template parameter lists are not allowed 

Tôi muốn có tất cả các khởi tạo có thể có của template struct foo bạn bè của foo<T> cho tất cả T.

Làm cách nào để thực hiện công việc này?

EDIT: Đây

template <typename T> 
struct foo 
{ 
    template <typename> 
    friend struct foo; 

private: 
    // ... 
}; 

dường như biên dịch, nhưng là nó có đúng không? Bạn bè và các mẫu có cú pháp rất không tự nhiên.

Trả lời

62
template<typename> friend class foo 

tuy nhiên điều này sẽ làm cho tất cả các mẫu bạn bè với nhau. Nhưng tôi nghĩ đây là những gì bạn muốn?

+0

cảm ơn hoạt động. Đúng, đó là điều tôi muốn. –

+4

bạn có thể vui lòng đăng phần tham chiếu đến tiêu chuẩn mà nó được xác định không? –

+7

Trong C++ 03 trong 14.5.3.3 và 14.5.3.4, trong C++ 11 bạn cần đọc phần Friends trong 14.5.4 –

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