句柄类衍生的问题

aled6825 2009-01-10 08:59:21
akirya,你好,
有一个问题向你请教:

诚如前面说的,使用句柄类可以封装类中的私有函数,但是我发现这样衍生出一个问题,在正常的类内公有与私有函数是可以相互访问的,但是在封装成句柄类后,函数访问变成单向的了,导出类的公有函数可以访问操作私有部分,但是私有部分却由结构体限制在内部,这种情况下应该如何去做?
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aled6825 2009-01-11
  • 打赏
  • 举报
回复
谢谢你的回复

目前是非完全封装,否则使用不上导出类了.

几个必要的format转换函数是需要导出的给双方使用的,同时一些数据成员要show给对方.
看来的话必须要在struct内部同时加上一个同步的成员指针,不知道这种方法是否可行?
  • 打赏
  • 举报
回复
你只导出公有函数就行了,也把私有函数导出的话不是又回到原来的起点了么?
xiaopoy 2009-01-11
  • 打赏
  • 举报
回复
帮顶混分
xiaopoy 2009-01-11
  • 打赏
  • 举报
回复
帮顶混分
aled6825 2009-01-11
  • 打赏
  • 举报
回复
明白了.
相当于对这个类进行了2次封装,外面的仅仅是一个壳,这样就不涉及单向与双向问题了.
非常感谢了您呐
给您补分
lightnut 2009-01-11
  • 打赏
  • 举报
回复
句柄可只需申明对外的使用契约(public函数), 再将契约转发给具体的实现类就好了.

//handle.h
class Handle
{
public:
Handle();
~Handle();
void DoThis();
void DoThat();

private:
class HandleImpl;
HandleImpl* mpImpl;
};

// handle.cpp
class Handle::HandleImpl
{
public:
void DoThis ()
{
DoThisStep1();
DoThisStep2();
}

void DoThat()
{
DoThatStep();
}

private:
void DoThisStep1() {}
void DoThisStep2() {}
void DoThatStep()
{
DoThis();
}
};


Handle::Handle()
{
mpImpl = new HandleImpl;
}

Handle::~Handle()
{
delete mpImpl;
}

void Handle::DoThis()
{
mpImpl->DoThis();
}

void Handle::DoThat()
{
mpImpl->DoThat();
}

  • 打赏
  • 举报
回复
mark
星羽 2009-01-10
  • 打赏
  • 举报
回复
抢坏的沙发

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧