是否有可能以某種方式使部分模板規範成爲朋友類?即考慮你有下面的模板類C++模板:部分模板規範和朋友類
template <class T> class X{
T t;
};
現在您有部分特例,例如,用於指針
template <class T> class X<T*>{
T* t;
};
我想做到的是,每一個可能的X<T*>
是朋友類X<S>
爲ANY S
。即X<A*>
應該是X<B>
的好友。
當然,我想過在X常用模板友元聲明:
template <class T> class X{
template <class S> friend class X<S*>;
}
然而,這並不編譯,G ++告訴我:
test4.cpp:34:15:錯誤:的 'template<class T> class X
' 專業化必須出現在命名空間範圍
test4.cpp:34:21:錯誤:偏特 'X<S*>
' 宣佈 '朋友'
這是不可能的或有一些解決方法?
爲什麼我問的原因是我需要X<T*>
一個構造函數,從任意X<S>
創建此類(S
必須是T
亞型)。
的代碼看起來是這樣的:
template <class T> class X<T*>{
T* t;
template<class S>
X(X<S> x) : t(&(x.t)) {} //Error, x.t is private
}
現在,編譯器會抱怨,當然,前提是x.t
不是在看得到的構造,因爲它是私有的。這就是爲什麼我需要一個部分專業化的朋友班。
「get」函數真的沒有問題嗎?這對我來說似乎更加清潔,並避免了所有模板朋友的瘋狂。 – pmr
它可能會在這個例子中工作。但是,可能有數據不應公開給公衆,而只能是模板專業化。問題是如果這種行爲有可能以某種方式。 – gexicide