typedef是一个可在Windows和Linux上使用的C++函数

typedef a C++ function to be usable on Windows and Linux

本文关键字:Linux 函数 C++ Windows 一个 typedef      更新时间:2023-10-16

我在Windows(WIN32 API)中有一些巨大的C++代码库,现在我也想将其移植到Linux。但是,更改代码不是一个好主意,因为对于Linux和Windows,将有两个文件副本。

相反,我的想法是,拥有一个头文件,其中包含所有WIN32特定声明到Linux声明的typedef,并适当地包含它。

#ifdef __gnu_linux__
#include "linuxCPPTypeDef.h"
#endif

linuxCPPTypeDef.h将包含typedef unsigned int DWORD;

直到这里一切都很好。更棘手的部分是…我的代码在很多地方使用了标准的min函数,但g++不理解它(需要std::min)。

有没有一种方法可以在头文件中进行声明,这样我就不必在代码中到处更改函数了?

#include <algorithm>
using std::min;
using std::max;

然而,如果你谈论的是Windows.h中的那些,它将它们定义为宏,而不是函数。编译器会以难以解决的微妙方式对它们进行不同的处理。例如,这不起作用:

#include <algorithm>
using std::min;
using std::max;
int Foo() {
    return 5 * min(1, 3.0);
}

因为编译器无法推导出CCD_ 4的模板类型;可以是CCD_ 5或CCD_。你必须明确告诉它std::min<int>(1, 3.0)

定义自己的宏版本可能很诱人:

#define min(x,y) ((x) < (y) ? (x) : (y))

或类似的;然而,在任何存在这种定义的地方,大多数GNU STL头都不能使用,因为它们假设minmax没有被定义为预处理器宏。

总而言之,您最好重写Windows代码以显式使用std::minstd::max。要做到这一点,您必须先#define NOMINMAX,然后再#include <windows.h>