C ++虚拟关键字作为一种避免包含代码单元的方法

时间:2011-01-07 23:47:47

标签: c++ virtual late-binding dlopen

目前我们有一组代码允许服务插件提供与核心的通信形式,例如tcp / ip,udp / ip,usb等...这些服务插件将通知程序类实例反馈到核心以进行进一步处理

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

两种替代选择: 1.将通知程序方法实现放在头文件中。 2.声明通知程序方法virtual和延迟绑定直到运行时。

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

我们还有其他选择吗?

由于

1 个答案:

答案 0 :(得分:2)

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

(添加引用计数和dynamic_cast的语言无关版本,我们称之为QueryInterface,你有COM,这在Windows上很普遍)

这种技术在* nix共享库上也可以正常工作。