关于跨平台代码大家的做法是怎样的

cnyfk 2014-12-16 12:53:27
最近有个需求是做一个debug的工具,发命令给硬盘。
但是要求linux和windows上都能用。

界面部分可以交给QT这个没有问题,但是设计到底层接口时就会涉及到linux和windows的区别来,我现在想到的做法是定义相同的接口,但是接口的实现部分放在2个不同的cpp中,一个是cpp对应linux的实现,一个是对应windows的实现。然后将这个二个cpp include到另一个cpp文件中在这个cpp文件中通过宏来确定平台,做到不同平台下编译不同cpp文件。

说了这么多主要是想知道这种方式是否合理,大家一般都是什么方式处理跨平台的底层接口。
毕竟qt中很多特定平台下的底层接口是没有对应的api的。
比如windows下的DeviceIOControl这个API我就没有找到对应的QT调用。
...全文
288 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
翅膀又硬了 2014-12-20
  • 打赏
  • 举报
回复
条件编译。。。
  • 打赏
  • 举报
回复
把所有底层抽出来成一个动态库,不同平台库代码不一样但是提供一致的接口
蜗牛sf 2014-12-17
  • 打赏
  • 举报
回复
我一般都是用#ifdef WIN32或者#ifdef UNIX
  • 打赏
  • 举报
回复
可以参考Qt4 的 q_p来实现撒,如果高端点的可以参考qt5的qpa
cnyfk 2014-12-16
  • 打赏
  • 举报
回复
我说的问题是在编译时
引用 1 楼 oldmtn 的回复:
大家一般都是什么方式处理跨平台的底层接口。 不同平台的相似功能抽象为同一个接口 在不同平台根据宏,或者虚函数来做。
接口的设计都是这样做的,只是不确定编译时如何做? 比如在windows平台下就将linux相关的实现代码文件屏蔽掉?你是如果做到用宏控制哪段代码编译哪段代码不编译? 难道是每个接口实现的函数里面都有个宏判断是否是哪个平台? 还是如我的做法通过将不同平台的cpp文件都inlude到一个cpp中然后在这个cpp中去决定编译哪个例如我的做法是这样的如下: // interface.h class interface { public: virtual void func() = 0; }; // windows.cpp #include "interface.h" class win public: interface { public: void func(){} }; // linux.cpp #include "interface.h" class linux public: interface { public: void func(){} } // core.cpp #ifdef _WINDOWS #include "windows.cpp" #else #include "linux.cpp" #endif
oldmtn 2014-12-16
  • 打赏
  • 举报
回复
大家一般都是什么方式处理跨平台的底层接口。 不同平台的相似功能抽象为同一个接口 在不同平台根据宏,或者虚函数来做。

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧