加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-windows跨c应用程序

发布时间:2020-12-14 00:55:11 所属栏目:Linux 来源:网络整理
导读:我正在开发一个必须在 Linux和Windows上运行的应用程序. 我有一个名为obj的对象,我想在代码中使用它,它在Linux和Windows上有不同的行为.所以我继承了aaa并为Windows对象调用了WindowsObj,为Linux对象调用了LinuxObj. 我的问题是:如何在代码中使用此对象?我
我正在开发一个必须在 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();

值得注意的是,如果只是奇怪的代码行在您的复杂对象中有所不同(比如初始化,销毁时的初始化调用),那么使用单个平台无关的对象可能会更好,并在实现中加入防护.当存在巨大差异时,此解决方案更有意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读