gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:59:04 26 4
gpt4 key购买 nike

我在 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);
}

因为编译器无法推断出 std::min 的模板类型;可能是 intdouble .你必须明确地告诉它 std::min<int>(1, 3.0) .

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

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

或类似的;然而,在任何存在此类定义的地方,大多数 GNU STL header 都无法使用,因为它们假定 minmax未定义为预处理器宏。

总而言之,您最好重写您的 Windows 代码以使用 std::minstd::max明确地。要完成这项工作,您必须 #define NOMINMAX在你之前#include <windows.h> .

关于c++ - typedef 一个可在 Windows 和 Linux 上使用的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com