簡體   English   中英

聲明一個朋友模板函數

[英]declaring a friend template function

這個問題部分基於Accelerated C++ [1] 中的練習 15-4 和該書中的代碼。 我想將myclone函數聲明為類的朋友,以便它可以訪問私有成員。 myclone函數被聲明為模板,但我不想讓所有可能的函數訪問私有成員,只有那些與該類關聯的函數。

class A{
    template <class T>
    friend T* myclone(const T*);

    A* clone() const {return new A(*this);}
}

其他一些文件:

template <class T>
T* myclone(const T* t) {return t->clone();}

另一個假設的myclone函數可以調用A對象的clone方法,但我想限制對A* myclone(const A*)的私有訪問。 有沒有辦法做到這一點,還是我想多了,這種情況在實踐中永遠不會發生? 我應該使用模板專業化嗎?

[1] Koenig, A., & Moo, BE (2000)。 通過示例加速 C++ 實用編程 皮爾遜。

您不能只允許朋友訪問您的某些私密部分。 這是一個全有或全無的事情。

friend A* myclone(const A*); 不起作用,因為沒有這樣的功能。 模板不是那個功能,也不是它的任何專業化。 如果您想與某個特定專業成為朋友,請這樣說:

template <class T> T* myclone(const T*); // needs to be declared first

class A {
   friend A* myclone<A>(const A*);
   ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM