2

我应该怎么做才能实现类似钩子的系统?
这是我的设置:

我有这些静态库:

A 和 B 就像可以一起包含在同一个应用程序中的模块。问题是我在 A 中有一个想要向 B 公开的函数。我正在使用回调列表执行此操作……但我对这个想法不满意。所以我想我可以实现一个类似钩子的系统,就像 Win32API 一样,但我想听听专家的意见。

当然,我可以访问这两个源代码。

注意:我忘了提到我没有使用类,并且由于设计决定,我无法为该项目创建类或对象,因此此处不允许使用继承之类的东西。

4

1 回答 1

2

您是否考虑过将共享部分移到第三个库中?

在严格静态链接的场景中,挂钩机制不会带来太大的胜利 - 一个共享依赖关系以及额外的动态复杂性帮助。如果您有一个地方可以放置两个库都可以访问的钩子,那么只需将函数放在那里即可。

或者,只需从库 A 中导出函数,从库 B 中引用它,也许确保库以正确的顺序链接,并且链接器应该为您整理出来。

如果库 A 可能链接也可能不链接,并且您的工具链支持它,您可以将 B 中的函数的虚拟版本声明为弱符号,如果链接 A,则 该弱符号将被覆盖。

于 2009-05-29T01:07:06.627 回答