linux-windows跨c应用程序
我正在开发一个必须在
Linux和Windows上运行的应用程序.
我有一个名为obj的对象,我想在代码中使用它,它在Linux和Windows上有不同的行为.所以我继承了aaa并为Windows对象调用了WindowsObj,为Linux对象调用了LinuxObj. 我的问题是:如何在代码中使用此对象?我该怎么写它会同时运行Linux和Windows? 对于swiching类型,我使用typedef,如: typedef uint32_t DWORD; 但我必须使用什么物体? tr1::shared_ptr<WindowsObj> windowsobj (new WindowsObj(parameter)); tr1::shared_ptr<LinuxObj> linuxobj (new LinuxObj(parameter)); 任何的想法? 解决方法
同一件事情 :)
class _object { }; class WindowsObject : public _object { }; class LinuxObject public _object { }; #if defined(WIN32) typedef WindowsObject Object; #else typedef LinuxObject Object; #endif Object myObject; 编辑:当然,WindowsObject和LinuxObject公开的接口必须是相同的.在这个例子中,_object将是一个定义接口的抽象基类,然后LinuxObject和WindowsObject将实现这个接口,将特定于平台的东西隐藏在它们的实现文件中. 样品 _object.h class _object { public: virtual void doSomething() = 0; }; // eo class _object WindowsObject.h #include "_object.h" class WindowsObject : public _object { public: virtual void doSomething(); }; // eo class WindowsObject WindowsObject.cpp #if defined(WIN32) #include <windows.h> void WindowsObject::doSomething() { // do something totally reliant on windows here }; // eo doSomething #endif 然后你会对LinuxObject.h和LinuxObject.cpp做同样的事情,后者有完全不同的预处理器指令.例如,#if defined(UNIX)或某些这样的风格.注意WIN32保护实现.然后你会有一些你使用的核心头文件: #if defined(WIN32) #include "WindowsObject.h" typedef WindowsObject Object; #else #include "LinuxObject.h" typedef LinuxObject Object; #endif 现在,在你的程序中 Object a; a.doSomething(); 值得注意的是,如果只是奇怪的代码行在您的复杂对象中有所不同(比如初始化,销毁时的初始化调用),那么使用单个平台无关的对象可能会更好,并在实现中加入防护.当存在巨大差异时,此解决方案更有意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 如何重置mongodb缓存
- Linux远程管理Windows程序Rdesktop详解
- 替换字符串ln java中的多个单词,如php str_replace
- linux – 如何使用VNC远程显示OpenGL图形?
- Linux--查询文件的第几行到第几行命令
- LINUX教程:怎么使用 Diff 和 Meld 工具发现两个目录间的不
- linux – 查看正在写入的文件(如iotop但文件,而不是进程)
- file-permissions – 如何将文件添加到没有root权限的docke
- 如何在Linux内核代码中生成内核oops或panic崩溃?
- linux – 使用30GB数据备份Web服务器的最佳方法是什么?