簡體   English   中英

如何結識部分專門的模板類的朋友?

[英]How to make a friend of a partially specialized template class to another partially specialized template class?

我需要一個模板專用類來與另一個模板專用類交friend

例:

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

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

現在,我希望這些模板類的某些特定專業成為朋友:

我試過了

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。

朋友聲明不能聲明部分專業化。 這里

朋友聲明不得聲明部分專業。 [示例:

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

—結束示例]

然而,如果“初始”類型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;
}

在線樣品

哪里有問題? 在問這個問題之前,您嘗試過什么?

// Templated class X
template <class A, bool>
class X {

};

// Templated class Y
template <class A, bool>
class Y {
    // Any specialized A is a friend of any specialized B
    template <class B, bool> friend class X;
};

編輯:更新您在問題評論中提供的課程。

暫無
暫無

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

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