具有更多模板参数的模板友类

template friend class with more template parameters

本文关键字:参数      更新时间:2023-10-16

我有一个类模板Obj1,有三个模板参数

template < class A, class B, class C >
class Obj1
{
      // some implementation
};

和带有两个模板参数的第二类模板Obj2,

 template < class A, class B >
    class Obj2
    {
          // some implementation
    };

所以我的问题是:

我想使类Obj1成为类Obj2的朋友,前两个模板参数具有相同的值,但我不知道确切的语法如何编写它,一开始我尝试用这种方法

template < class A, class B>
class Obj2
{
    template< class C>
    friend class Obj1<A,B,C>;
};

,但它没有编译,所以请帮助我,如果你可以。

你的问题的答案在这里:https://stackoverflow.com/a/1458897/2436175"你只能‘成为’一个类模板的所有实例化或特定的完全特化的朋友。"

所以,这是允许的:

template < class A, class B, class C >
class Obj1
{
      // some implementation
};
template < class A, class B>
class Obj2
{
    public:
    template <class C, class D, class E> friend class Obj1; ///All instances
};
template < class A, class B>
class Obj3
{
    public:
    friend class Obj1<A,B,int>; ///One specific instantiation, possibly depending from your own templated parameters
    friend class Obj1<A,B,A>; ///One specific instantiation, possibly depending from your own templated parameters
    friend class Obj1<char,float,int>; ///One specific instantiation, possibly depending from your own templated parameters
};