2012-03-20 3 views
0

의 우정과 같은, 친구 클래스를 템플릿을 할 수 있나요 : 나는 policy-based design를 사용하고 있음을을 템플리트 C++

template <class T> 
class MyClass { 
public: 
    friend class T; 
}; 

나는이를 얻기 위해 노력하고있어 이유는 내가 원하는 내 호스트 구성원에 액세스하는 policy 클래스. (... 이제 내 디자인이 단순히 나쁜 것일 수 있다고 생각하기 시작합니다 ...)

미리 감사드립니다.

+2

방법이 있습니다 : [CRTP] 사용 (http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) –

+0

T와 MyClass가 공통 기본 클래스를 가질 수 있다면 CRTP가 좋은 해결책이라고 생각합니다! –

+3

그것은 지금 허용됩니다 (http://stackoverflow.com/questions/6510041/template-parameter-as-a-friend) – Lol4t0

답변

4

C++ 03에서는 템플릿의 인수에 우정을 선언 할 수 없습니다.

§7.1.5.3/2 ...] 식별자가 typedef- 이름 또는 템플릿 유형 파라미터로 확인되면, 정교 형 지정자이 잘못 형성된다. [참고 :이 템플릿 형식 매개 변수 T와 클래스 템플릿을 선언

 friend class T; 

내 잘못 형성되어 있음을 의미한다. ]

C++ 11에서는 이러한 점에 약간의 변화가 있었지만 조금 이상합니다. friend class T;은 여전히 ​​불량하지만 friend T은 허용됩니다. 인용 한이 같은 단락에서 찾을 수 있습니다

§7.1.5.3/2

[...] [참고 :이 의미, 그 템플릿 형식 매개 변수 T와 클래스 템플릿 내에서, 선언

friend class T; 

이 잘못 형성된다. 그러나, 유사한 선언 친구 T; 허용된다 (11.3). - 끝 노트]

노트는 규범 적이 지 않지만 주위의 규범의 의도를 나타냅니다. 나는 정확한 문구를 만드는 특정 문장을 찾을 수 없었지만, 적어도이 허락되어야한다는 것이 이라고 가정합니다.

+0

실제로 이상하지만 실용적인 경우 :) 데이비드 감사합니다. – Shnippoo