有可能以某种方式使部分模板规范成为朋友类吗?即你认为你有以下模板类
template <class T> class X{
T t;
};
Run Code Online (Sandbox Code Playgroud)
现在你有部分特化,例如,指针
template <class T> class X<T*>{
T* t;
};
Run Code Online (Sandbox Code Playgroud)
我想做到的是,每一个可能X<T*>是朋友类X<S>为ANY S.即X<A*>应该是的朋友X<B>.
当然,我想到了X中通常的模板朋友声明:
template <class T> class X{
template <class S> friend class X<S*>;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不能编译,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 …Run Code Online (Sandbox Code Playgroud) c++ templates partial-specialization template-specialization friend-class