c++ - 具有更多模板参数的模板友元类

标签 c++

我有一个带有三个模板参数的类模板 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
};

关于c++ - 具有更多模板参数的模板友元类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920640/

相关文章:

python - time.sleep 对处理器有帮助吗?

c++ - 为什么cerr输出比cout快?

c++ - 以线程安全的方式与外界共享一个数据成员

c++ - 为什么在递增返回错误地址的当前内存位置后使用 [] 运算符访问指针数组?

c++ - 如何创建与标准集复制分配一起使用的自定义类?

c++ - objcopy 将目录路径名附加到符号名

c++ - 是否可以在其范围之外访问局部变量的内存?

C++:定义多个构造函数时的对象创建/销毁顺序

c++ - 如何避免在字符串数组中重复输入?

c++ - 在c++中声明变量常量有什么意义