c++ - linux-windows跨c++应用

标签 c++ windows linux typedef

我正在开发一个必须在 Linux 和 Windows 上运行的应用程序。 我有一个名为 obj 的对象,我想在代码中使用它,它在 Linux 和 Windows 上有不同的行为。所以我继承 aaa 并为 Windows 对象调用 WindowsObj,为 Linux 对象调用 LinuxObj。

我的问题是:如何在代码中使用这个对象?我必须写些什么才能在 Linux 和 Windows 上运行?

对于切换类型,我使用 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 公开的接口(interface)必须相同。在此示例中,_object 将是定义接口(interface)的抽象基类,然后 LinuxObject 和 WindowsObject 将实现该接口(interface),将特定于平台的内容隐藏在它们的实现文件中。

示例

_object.h

class _object
{
public:
    virtual void doSomething() = 0;
}; // eo class _object

Windows对象.h

#include "_object.h"

class WindowsObject : public _object
{ 
public:
    virtual void doSomething();
}; // eo class WindowsObject

Windows对象.cpp

#if defined(WIN32)
#include <windows.h>

void WindowsObject::doSomething()
{
    // do something totally reliant on windows here
}; // eo doSomething
#endif

然后您将对 LinuxObject.hLinuxObject.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();

值得注意的是,如果只是奇怪的代码行在您的复杂对象中有所不同(例如初始化、销毁时的 init 调用),您最好使用一个与平台无关的对象并在实现中放置守卫.当存在巨大差异时,此解决方案更有意义。

关于c++ - linux-windows跨c++应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186643/

相关文章:

c++ - 从指针 vector 中获取一个元素

c# - 单声道,跨OS(Windows/Linux)Web浏览器 View

windows - 给eclipse更多的堆空间来编译项目?

linux - 使用 SOX 混合音频,sox FAIL 格式 : can't open input file `audio_recorded.wav' : WAVE: RIFF header not found

linux - 如何在我的终端中默认更改目录? (命令行)

c++ - 在什么情况下 make 需要以 .h 文件为目标

c++ - 标准::设置。定制套组

c++ - 检测音频输出+语音合成库的建议

windows - 命令提示符中的 QuickEdit 模式如何以及为什么卡住应用程序?

linux - dd命令调整文件系统