一个模板类可以在c ++中成为另一个模板类的朋友吗?

时间:2012-03-26 00:44:53

标签: c++ templates friend

我有两个模板类,templateClass1和templateClass2。我想在templateClass2中使用templateClass1的私有变量和方法。是否可以通过在c ++中使用friend关键字来实现?

萨米特

2 个答案:

答案 0 :(得分:1)

我知道这篇文章可能已经死了,但对其他偶然发现的人来说......

  

templateClass1.h

template <class T> class templateClass2;    // forward declare

template <typename T>
class templateClass1 {
    friend templateClass2<T>;
};
  

templateClass2.h

template <class  T> class templateClass1;    // forward declare

template <typename T>
class templateClass2 {
    friend templateClass1;
}

答案 1 :(得分:-1)

可以拥有任何类型的朋友,但在提供模板参数之前,模板不是类型。所以一般来说,你必须对你希望成为朋友的每个完整类型都有一个专业化。这将推动您尝试将类型作为模板参数传递给朋友,但是您无法提供将被模板化的模板类型。

代表。这是非法的

template <class T> 
class A
{
     friend class T;
};

根据这些规定,它很难做任何意味着充满模板和朋友的事情。