相关疑难解决方法(0)

C++模板:部分模板规范和朋友类

有可能以某种方式使部分模板规范成为朋友类吗?即你认为你有以下模板类

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

8
推荐指数
1
解决办法
2176
查看次数