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