我想实现一个只能通过我想要的类访问的Container
类,其方式类似于以下
class ContainerAccess {
// empty
};
class Container{
private:
static void _do_stuff();
static int _value;
friend class ContainerAccess;
};
现在我希望能够访问Container
数据,如下所示:
class Processor: public ContainerAccess {
public:
void proccess() {
Container::_do_stuff();
Container::_value++;
}
};
然而,这不起作用。这是为什么?怎么可能这样做?
答案 0 :(得分:1)
你的方法是错误的,因为友谊不是继承的。但是,有一种很好的方法可以解决你想要解决的问题和私人继承问题。
class Container
{
protected:
static void _do_stuff();
static int _value;
};
class ContainerAccess : private Container
{
//using _do_stuff();
};
通过这种方式,您可以选择需要使用的任何类class Container
,同时还可以阻止其他用户使用您的课程。
答案 1 :(得分:-2)
一种可能的替代方法是不使Container
私有静态方法,而是将它们公之于众。
然后,在您的main函数中,创建一个Container
的实例,并将其传递给需要访问Container
提供的功能的方法/类。
class Processor {
public:
void process(Container & container) {
container.do_stuff();
container.value++;
}
};
您不提供Container实例的方法无法运行。