我正在开发可在多个平台上运行的软件。我提供了一个包含所有公共API函数的常规头文件。实际的源文件将包含非常不同的代码,具体取决于所编译的平台。
我可以在同一个.cpp文件中处理所有平台,但是我觉得这真的会很快变得混乱。
下一个想法是,每个平台都有一个源文件,并用#ifdefs包围,其中包含平台特定的代码。我觉得这是一种更简洁的方法,因为错误的代码基本上甚至不在错误的平台上存在。我显然不是在寻找最佳方式,因为那是非常主观的。
Window.h:
#pragma once
class Window
{
public:
void Create();
};
Window_Win32.cpp:
#ifdef WINDOWS
#include "Window.h"
void Window::Create()
{
// Win32 specific
}
#endif
Window_Linux.cpp:
#ifdef LINUX
#include "Window.h"
void Window::Create()
{
// Linux specific
}
#endif
答案 0 :(得分:1)
使用成千上万的#ifdef使用正确的平台是一场噩梦。但这是一种方法,而其中一些著名的代码就是这样做的。
我更喜欢为每个平台使用不同的.h / .cpp,并且为所有平台使用通用代码使用一些.cpp。
.h标头应包含常见的对象/函数,并应包含(通过#ifdefs)特定的平台标头(该平台的标头仅包含该对象/函数)。
使用这种方法,您需要为每个平台使用不同的配置/ makefile /任何构建文件。