C++ 封装和信息隐藏的更好选择
我有一个C++ 封装和信息隐藏的更好选择,c++,c++11,C++,C++11,我有一个框架,用户可以通过覆盖一些接受对象引用的成员函数来实现。除了Framework::f()之外,不允许用户从这些函数中调用Object::do\u something()。为了实现这个需求,我必须引入一个带有静态成员函数的Helper类,如下例所示。我想知道有没有更短或更干净的 class Object; struct Framework { // the interface is fixed protected: virtual void f(Object& o); /
框架
,用户可以通过覆盖一些接受对象
引用的成员函数来实现。除了Framework::f()
之外,不允许用户从这些函数中调用Object::do\u something()
。为了实现这个需求,我必须引入一个带有静态成员函数的Helper
类,如下例所示。我想知道有没有更短或更干净的
class Object;
struct Framework { // the interface is fixed
protected:
virtual void f(Object& o); // f is allowed to call o.do_something()
virtual void g(Object& o); // g is not allowed to call o.do_something()
friend class Helper;
};
class Helper { // Helper class to make things work as wanted
friend class Object;
friend void Framework::f(Object&);
static void helper(Object&);
};
class Object {
void do_something() {}
friend void Helper::helper(Object&);
public:
void do_something_else() {}
};
void Helper::helper(Object& o) {o.do_something();}
// user implementation
void Framework::f(Object& o) {Helper::helper(o);}
void Framework::g(Object& o) {o.do_something_else(); /*Helper::helper(o);*/} // o.do_something() denied
可能您应该声明
void f(Object&o)
为Object
类的friend
,就像您对void Helper::Helper(Object&)
方法所做的那样。为什么不将对象只传递给那些允许使用它的函数(如f
),而不传递给其他函数(g
)?因为允许g调用object的其他成员函数,所以您的问题没有明确说明这一点。我认为最好是显式声明。@maverik我在object中添加了另一个公共成员函数,您可以声明Framework
的接口是固定的。对象
的接口有多固定?你能重构它吗?因为do\u something()
是私有的,那么f()
如何调用它呢?