【发布时间】:2021-10-07 06:20:43
【问题描述】:
背景
我正在开发一个独立于平台(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());
但是,我不确定如何执行此操作,以便编译我的项目以支持所有不同的相机。任何人都可以就实现这一目标的最佳方式提出任何建议吗?
非常感谢 阿曼达
【问题讨论】:
-
首先选择一种语言。 C 和 C++ 是不同的语言,会有不同的解决方案。第二,你应该学习OOP,接口和接口实现,这就是你申请的任务。