是否有可能將聲明前向聲明的類的成員函數聲明爲朋友?我試圖做到以下幾點:聲明前向聲明的類的成員函數爲朋友
class BigComplicatedClass;
class Storage {
int data_;
public:
int data() { return data_; }
// OK, but provides too broad access:
friend class BigComplicatedClass;
// ERROR "invalid use of incomplete type":
friend void BigComplicatedClass::ModifyStorage();
};
所以我們的目標是(i)限制的朋友申報單的方法,及(ii)不包括複雜的類的定義,以減少編譯時間。
一種方法可能是添加一個類作爲中間人:
// In Storage.h:
class BigComplicatedClass_Helper;
class Storage {
// (...)
friend class BigComplicatedClass_Helper;
};
// In BigComplicatedClass.h:
class BigComplicatedClass_Helper {
static int &AccessData(Storage &storage) { return storage.data_; }
friend void BigComplicatedClass::ModifyStorage();
};
然而,這似乎有點笨拙,所以,我認爲必須有一個更好的解決方案!
可能重複的[如何聲明一個朋友是C++中另一個尚未定義的類的成員函數?](http://stackoverflow.com/questions/ 4355660/how-to-declare-a-friend-that-is-a-member-function-of-another-not-defined-clas) – 2011-06-10 18:54:12
感謝您的參考 - 我看到了這個問題;然而,它接受的答案是我想避免的太寬泛的課程級訪問... – hrr 2011-06-10 19:46:43