typedef是一个可在Windows和Linux上使用的C++函数
typedef a C++ function to be usable on Windows and Linux
我在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头都不能使用,因为它们假设min
和max
没有被定义为预处理器宏。
总而言之,您最好重写Windows代码以显式使用std::min
和std::max
。要做到这一点,您必须先#define NOMINMAX
,然后再#include <windows.h>
。
相关文章:
- 函数在Windows或Linux上运行时表现不同
- 如何将函数指针从 std::function 传递到 Linux 克隆?
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 有没有一种方法可以在linux中扫描已构建的ARM库中的函数
- 我可以为这些特定函数使用什么C++标头?Linux
- 删除了 g++ 在 linux 中basic_stringstream函数 std
- 如何在Linux中使用GLFW函数正确链接C++对象?
- 如何在 Linux 中运行 Visual Studio 2015 托管 c++ 测试函数?
- 奇怪的内存消耗 C fread / C++ 读取函数,基于 Linux sysinfo 数据
- 无效使用非静态成员函数 c++ 线程 linux
- linux 是否"rename"函数调用块,直到复制(当源和目标在不同磁盘中时)完成
- 错误:没有匹配的成员函数调用 'upper_bound' =>仅在 macOS 上 => Windows 和 Linux 都很好
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 如何使用Mono / C#程序调用Linux / C ++函数?
- ``pollout''Linux函数中的“ Pollout”事件是什么意思
- gettimeofday,如何翻译 Linux 函数
- Linux函数以一定的间隔调用