gpt4 book ai didi

c++ - 如何使一个部分特化模板类成为另一个部分特化模板类的 friend ?

转载 作者:行者123 更新时间:2023-11-28 05:04:51 26 4
gpt4 key购买 nike

我需要一个模板专用类来使另一个模板专用类成为 friend

例子:

template <class A, class B>
class X { };

template <class A, class B>
class Y { };

现在我希望这些模板类的一些特定专业成为 friend :

我试过了

template <class A>
class X <A, bool> { };

template <class A>
class Y <A, bool>
{
// X<A, bool> shall be friend!
template<class _C> using X_partial = X<_C,bool>;
template<class _D> friend class X_partial;

};

还有这个,

template <class A>
class X <A, bool> { };

template <class A>
class Y <A, bool>
{
// X<A, bool> shall be friend!
template<class C> friend class X<class C,bool>

};

但两者都给出了错误。

语法可以支持C++(03)、C++11或C++14。

最佳答案

友元声明不能声明偏特化。参见 here .

Friend declarations shall not declare partial specializations. [ Example:

template<class T> class A { };
class X {
template<class T> friend class A<T*>; // error
};

— end example ]

但是,如果 A 的“初始”类型相同,则为正确的特化提供友元,如下所示;

template <class A, class B>
class Y { };

template <class A, class B>
class X {
public:
// fails to compile when instantiated
//X() { Y<A, bool> y; y.i = 42; }
};

template <class A>
class Y <A, bool>
{
// partial specialisation provided friendship
friend class X<A, bool>;
int i = 0;
};

template <class A>
class X <A, bool> {
public:
X() { Y<A, bool> y; y.i = 42; }
};

int main()
{
X<int, bool> x1;
// fails to compile.
X<int, int> x2;
}

Sample online .

关于c++ - 如何使一个部分特化模板类成为另一个部分特化模板类的 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com