2010-10-11 11 views
5

Olası Çoğalt:
Is this key-oriented access-protection pattern a known idiom?Bir arkadaş sınıfının, başka bir sınıfa ait 1 fonksiyona yalnızca özel erişimini sağlayın.

Ben class A ve class B var. class B'un özel işlevlerinden birine erişmek için class A istiyorum; ama sadece bu, başka her şey değil. Mümkün mü?

örneğin çeşit: Sınıf B özel üye işlevlerini kullanmak istediğiniz sınıf A'da bir (veya birkaç) üyeleri, fonksiyonları, varsa

class A { 
    //stuff 
}; 

class B { 
    int r; // A cant use this 
    MagicFriendKeyword A void func(); // A can use this 
public: 
    ... 
}; 
+4

Yinelenen [bilinen bir deyim bu anahtar yönelik erişim-koruma düzeni mi?] (Bkz http://stackoverflow.com/questions/3220009/is-this-key-oriented- erişim-koruma-desen-a-bilinen deyim). Bu soru, ne sorduğunuzu nasıl elde edebileceğinize dair bir örnek verir; aslında [bu soru] (http://stackoverflow.com/questions/3217390/clean-c-granular-friend-equivalent-answer-attorney-client-idiom) daha iyi bir kopya olabilir. –

+0

Ayrıca bkz. [Bu soru] (http://stackoverflow.com/questions/3324898/can-we-increase-the-re-usability-of-this-key-oriented-access-protection-pattern) genellemek. Sanırım "passkey friend idiom" ismiyle bitti. Buradaki fikir, yalnızca belirli sınıfların bir "şifre" türü oluşturabilmesi ve fonksiyonun sadece belirli şifreleri, erişimi veya "arkadaşlığı" kabul etmesini kabul etmesidir. – GManNickG

+0

Başvurulan tartışmaların kapsamına göre daha fazla - ve içeriğe daha iyi bağlı - çözümler vardır. Özellikle, bir arayüz olarak 'func' faktoring. Açık uçlu soruları kapatmayın, lütfen benzer eski tartışmalar açık uçlu ve tamamlanmış değilse. –

cevap

4

, o zaman olduğu gibi bu bir/birkaç fonksiyonları ilan edebilir arkadaş. Örneğin.

class B { 
    // ... 
    friend void A::mutateB(B *); 
    // ... 
}; 

arasında http://en.wikipedia.org/wiki/Friend_function

+0

Sadece A'nın 1 özel işlevini çağırabilmesini istiyorum. B. – jmasterx

+0

A sınıfındaki tüm işlevlerin bunu kullanacağı için A sınıfının tüm işlevlerine erişmek istiyorum. – jmasterx

+5

Bu sorulan şey değil. Bu hala B'nin _all_ üyelerine bu işlev erişimini verir. Tek bir üyeye erişim vermek istediği B. – JoshD

İlgili konular