我应该怎么做才能实现类钩子系统? 这是我的设置:
我有这些静态库:
A和B就像是可以在同一个应用程序中包含在一起的模块。问题是我在A中有一个我想要暴露给B的函数。我用回调列表来做这个...但我对这个想法感到不舒服。所以我认为我可以像Win32API一样实现类似挂钩的系统,但我希望听到专家的意见。
当然,我可以访问这两个源代码。
注意:我忘了提到我不使用类,因为设计决定,我不能为这个项目创建一个类或对象,所以这里不允许继承类。
答案 0 :(得分:2)
您是否考虑过将共享部分移到第三个库中?
在一个严格静态链接的场景中,钩子机制不会是一个很大的胜利 - 一个共同的依赖与额外的动态复杂的帮助。如果你有一个放置你的两个库都可以使用的钩子的地方,那就把它放在那里吧。
或者,只需从库A中导出函数,从库B中引用它,也许确保库以正确的顺序链接,链接器应该为您排序。
如果库A可能链接或未链接,并且您的工具链支持它,您可以在B中将该函数的虚拟版本声明为weak symbol,如果链接A,则会覆盖该版本。