1

目前,我们有一段代码允许服务插件向内核提供通信形式,例如 tcp/ip、udp/ip、usb 等……这些服务插件将通知程序类实例反馈给内核以进行进一步处理。

在当前的实现中,一个服务项目(它是一个在运行时由核心通过 dlopen 和朋友引入的单独的动态链接库)将针对驻留在核心源代码(一个单独的项目)中的 notifier.cpp 文件进行编译。这提供了对通知方法实现的访问权限。这完全没有抱怨。

两个备选方案: 1. 将通知方法实现放在头文件中。2. 将通知方法声明为虚拟并延迟绑定直到运行时。

避免计算开销问题 选项 2 的影响是什么?

我们还有其他选择吗?

谢谢

4

1 回答 1

2

是的,向消费者公开带有纯虚函数的接口是从 Windows DLL 公开 C++ 对象的标准方式。客户端不知道任何实现细节:没有成员变量,没有成员函数体,只有虚拟布局。

(添加引用计数和与语言无关的版本dynamic_cast,我们将其称为QueryInterface,并且您拥有在 Windows 上普遍存在的 COM)

这种技术也适用于 *nix 共享库。

于 2011-01-08T01:20:19.397 回答