문제

C ++에 계급 우정이 상속되지 않기 때문에 "가짜"하는 가장 좋은 방법은 무엇입니까?

나는 To-be-inherited Base 클래스에서 보호 된 방법을 통해 친구 클래스의 개인 인터페이스를 노출시키는 것에 대해 생각하고 있었지만 동일한 인터페이스를 두 번 쓰고 유지해야합니다.

다른 방법이 있습니까?

도움이 되었습니까?

해결책

a의 사용 열쇠 가능한 해결책입니다.

아이디어는 당신이있는 경우에만 작업을 잠금 해제 할 수 있다는 것입니다. 열쇠... 그러나 예를 들어 단어에 수천 명의 가치가 있으므로 다이빙하자 :

// Step 1: The key
class NeedAccess;

namespace details { class Key { friend NeedAccess; Key() {} }; }

// Step 2: NeedAccess
class NeedAccess
{
protected:
  static details::Key GetKey() { return details::Key(); }
};

// Step 3: The big one
class BigOne
{
public:
  void lockedMethod(details::Key);
};

카피 구성 가능한 핵심의 문제는 토론에 달려 있습니다. 나는 당신이 그것을 방해함으로써 얻을 수있는 것을 보지 못합니다.

또 다른 장점은 액세스하려는 방법에 따라 여러 가지 열쇠를 가질 수 있다는 것입니다.

편집하다:

이 방법은 제한된 우정이라고하며 comp.lang.c ++. 중재.

이 방법의 주요 장점은 개인 인터페이스, 전방 선언 만 필요하기 때문에 느슨한 커플 링입니다.

다른 팁

Frinedship을 가진 수업의 아이들은 부모에게 접근을하도록 요청해야합니다.

class CrustyNeighbour
{
    private:
       friend class Bob;
       void useWiFi(std::string const& data);
};

class Bob
{
    protected:
        useWifi(CrustyNeighbour& neighbour,std::string const& data)
        {  neighbour.useWiFi(data);}
};

class Mary: public Bob // Bob's offspring
{
     void playHalo(WifiOwner& owner) // WifiOwner derived from CrustyNeighbour
     {
         useWifi(owner,gameData);  // use wifi via his/her parent who access to eighbours wifi
     }
};

이것이 당신이 이미 생각하고있는 것이 아닌지 확실하지 않지만 여기에 가상 친구 예시

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top