编译windows版本的一厢情愿
compile time windows version wishful thinking
为了准确地展示我想要的东西,基本上我已经从这里获得了代码,并将其转化为一厢情愿的想法,如下所示:
int wmain( int argc, PCWSTR argv[] )
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
if constexpr (IsWindowsXPOrGreater())
{
printf("XPOrGreatern");
}
else if constexpr (IsWindowsXPSP1OrGreater())
{
printf("XPSP1OrGreatern");
}
else if constexpr (IsWindowsXPSP2OrGreater())
{
printf("XPSP2OrGreatern");
}
else if constexpr (IsWindowsXPSP3OrGreater())
{
printf("XPSP3OrGreatern");
}
else if constexpr (IsWindowsVistaOrGreater())
{
printf("VistaOrGreatern");
}
else if constexpr (IsWindowsVistaSP1OrGreater())
{
printf("VistaSP1OrGreatern");
}
else if constexpr (IsWindowsVistaSP2OrGreater())
{
printf("VistaSP2OrGreatern");
}
else if constexpr (IsWindows7OrGreater())
{
printf("Windows7OrGreatern");
}
else if constexpr (IsWindows7SP1OrGreater())
{
printf("Windows7SP1OrGreatern");
}
else if constexpr (IsWindows8OrGreater())
{
printf("Windows8OrGreatern");
}
else if constexpr (IsWindows8Point1OrGreater())
{
printf("Windows8Point1OrGreatern");
}
else if constexpr (IsWindows10OrGreater())
{
printf("Windows10OrGreatern");
}
else if constexpr (IsWindowsServer())
{
printf("Servern");
}
else
{
printf("Clientn");
}
}
目的显然是要有标准的C++代码,使用带有windows版本编译时检测的constexpr-if
。这一切都在VersionHelpers.h
中,但它不是编译时的C++17。
VersionHelpers.h
中的函数不会返回constexpr值。问题是,是否有人做过这样的事?还是用不同的实现方式来实现相同?
这根本不可能。
尽管库/OS版本有时会对部署施加实际限制,但编译器通常针对体系结构,而不是操作系统
如果你在计算机A上构建代码,编译器如何知道计算机B的操作系统,编译后的程序将在哪里运行?。
所以这就是其中没有一个是constexpr
的原因之一。
以下是对更多运行时途径的探索。
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 编译windows版本的一厢情愿