背景
我正在开发一个独立于平台(Linux、macOS 和 Windows)的科学成像应用程序,该应用程序实现了各种专业相机,并且这些相机中的每一个都有一个制造商提供的 SDK。我目前正在实施一系列新相机,这些相机由一家公司制造,但由其他制造商使用单独的 SDK 进行品牌推广。
除了 SDK 函数名称的细微差别外,公共接口是相同的。也就是说,一切都一样(函数返回类型和签名等)。唯一的区别是函数名的开头。
SDK 公共接口示例
int company_1_count_cameras();
bool company_1_init_camera(...);
bool company_1_connect_camera(...);
还有:
int company_2_count_cameras();
bool company_2_init_camera(...);
bool company_2_connect_camera(...);
我希望能够对所有 OEM 相机使用一种实现,但要考虑到功能名称的差异。我已经尝试在预处理器定义中使用函数指针,这部分有效。到目前为止,我已经完成了以下工作:
我已将以下内容放入包含文件中:
#define FP( func ) company_2 ## func
在实现中,我已经做到了:
int count = FP(count());
但是,我不确定如何执行此操作,以便我可以编译我的项目以支持所有不同的相机。任何人都可以就实现这一目标的最佳方式提供任何建议吗?
非常感谢 阿曼达