C++: Can a Template be friend of a Class?

276 Views Asked by At

Is it possible to make friend of a class, all possible variants of a class-template?

Just to clarify, for example, something like this:

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

So any B<X> variant could manipulate any protected attribute of A.

A is an small and simple class with a lot of friends who manipulate its attributes. Just one of then need to be a template. I know that I can do this:

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

But so I would have to change my code in all the other friends and I would like to avoid it.

1

There are 1 best solutions below

0
Dmitry Kuzminov On BEST ANSWER

You may define a friend template class like that:

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

That would make every specialization of class B a friend of class A. I've had a similar question that had the opposite goal: to restrict some specializations: Friend template function instantiations that match parameter