C ++: Может ли шаблон быть другом класса? - PullRequest
4 голосов
/ 05 августа 2020

Можно ли подружить класс, все возможные варианты шаблона класса?

Просто для пояснения, например, примерно так:

class A
{ friend template B; }    // syntactic error yeah

Так что любой Вариант B<X> может управлять любым защищенным атрибутом A.

A - небольшой и простой класс с множеством друзей, которые манипулируют его атрибутами. Только один из них должен быть шаблоном. Я знаю, что могу это сделать:

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

Но поэтому мне пришлось бы изменить свой код во всех других друзьях, и я бы хотел этого избежать.

1 Ответ

5 голосов
/ 05 августа 2020

Вы можете определить класс шаблона друга следующим образом:

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

Это сделает каждую специализацию class B другом class A. У меня был аналогичный вопрос с противоположной целью: ограничить некоторые специализации: экземпляры функции шаблона друга, соответствующие параметру

...