This question already has an answer here:
- Why does C++ not allow inherited friendship? 10 answers
I would like to implement a Container
class that can only be accessed by the classes I want, in a way similar to the following
class ContainerAccess {
// empty
};
class Container{
private:
static void _do_stuff();
static int _value;
friend class ContainerAccess;
};
Now I want to have access to the Container
data as follows:
class Processor: public ContainerAccess {
public:
void proccess() {
Container::_do_stuff();
Container::_value++;
}
};
However, this does not work. Why is that? And how could that be done?
A possible alternative would be to not make the methods of
Container
private static, but instead make them only public.Then, in your main function, create a single instance of
Container
, and pass it around to methods/classes who need access to the functionality provided byContainer
.The methods who you do not give an instance of Container cannot then operate.
Your approach is wrong as friendship is not inherited. However, there is a good way to solve what you are trying to solve and that's private inheritance.
This way you can chose whatever classes need to use
class Container
at the same time you also prevent other users from using your class.