Может ли один класс шаблона быть другом другого шаблона в C ++? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть два шаблона класса, templateClass1 и templateClass2. Я хочу использовать частные переменные и методы templateClass1 в templateClass2. Возможно ли это сделать с помощью ключевого слова friend в c ++?

Sumit

Ответы [ 2 ]

1 голос
/ 06 мая 2017

Я знаю, что этот пост, вероятно, мертв, но для других, кто наткнулся на это ...

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;
}
0 голосов
/ 26 марта 2012

Можно иметь друзей любого типа, но шаблон не является типом, пока не будут предоставлены аргументы шаблона. Таким образом, в общем, вы должны иметь специализацию для каждого полного типа, с которым вы хотите дружить. Это подтолкнет вас к попытке передать тип для дружбы в качестве параметра шаблона, но вы не можете предоставить тип шаблона, который будет подружиться.

например это незаконно

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

с этими оговорками очень трудно делать что-либо значимое, полное шаблонов и дружелюбия.

...