C ++에서 우정이 적어도 선택적으로 상속되지 않는 이유는 무엇입니까? 나는 명백한 이유로 인해 전이성과 재 귀성이 금지된다는 것을 이해하지만 (단순한 FAQ 인용문 답변을 언급하기 위해서만이 말을합니다), virtual friend class Foo;
퍼즐 라인을 따라 무언가가 부족하다는 것은 저 를 괴롭 힙니다. 이 결정의 역사적 배경을 아는 사람이 있습니까? 우정은 정말 몇 가지 모호한 존경할만한 용도로 나아간 제한된 해킹 이었습니까?
명확히하기 위해 편집 : A의 자식이 B와 B와 자식 모두에게 노출되는 것이 아니라 다음 시나리오에 대해 이야기 하고 있습니다. 친구 기능의 재정의 등에 대한 액세스 권한을 선택적으로 부여하는 것도 상상할 수 있습니다.
class A {
int x;
friend class B;
};
class B {
// OK as per friend declaration above.
void foo(A& a, int n) { a.x = n; }
};
class D : public B { /* can't get in A w/o 'friend class D' declaration. */ };
허용 대답은 : 로 로키 상태 , 효과는 매우 엄격한 없다, 더 많거나 적은 friended했다 기본 클래스에서 보호 프록시 기능을함으로써 시뮬레이션 할 수 있습니다 필요 클래스 또는 가상 메서드 계층 구조에 우정을 부여하는가. 나는 상용구 프록시 (친구 기반이 효과적으로되는)의 필요성을 싫어하지만, 이것이 대부분의 시간 동안 오용 될 가능성이 더 높은 언어 메커니즘보다 선호되는 것으로 간주되었다고 생각합니다. 나는 아마도 Stroupstrup의 The Design and Evolution of C ++를 구입하고 읽을 때라고 생각합니다. 이런 유형의 질문에 대한 더 나은 통찰력을 얻기 위해 여기에서 충분한 사람들이 추천하는 것을 보았습니다.