我偶然发现了来自https://github.com/nothings/stb/的图像处理库,当我尝试使用 C++ 模块时,我尝试使用 stb_image.h“作为模块”。
为此,我编写了一个小型包装模块(与 glm 演示的技术相同, https://github.com/g-truc/glm,它将其库包装为 glm.cppm 内的 C++ 模块),它似乎运行良好:
module;
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
export module stb_image;
// this "seems" correct
export using ::stbi_uc;
// this should be correct
export stbi_uc *stbi_load(char const *filename,int *x,int *y,int *comp,int req_comp);
export void stbi_image_free(void *retval_from_stbi_load);
// is this the correct way to export enum values?
export using ::STBI_default;
export using ::STBI_grey;
export using ::STBI_rgb;
export using ::STBI_rgb_alpha;
我完全不确定如何处理 stb_image.h 中作为未命名枚举提供的这些 STBI 值:
enum
{
STBI_default = 0, // only used for desired_channels
STBI_grey = 1,
STBI_grey_alpha = 2,
STBI_rgb = 3,
STBI_rgb_alpha = 4
};
我进行了上述实验,至少 Visual C++ 2022“接受”了我的想法,并且代码可以正确执行,可以从导入此模块“stbi_image”的其他代码中使用这些值。
但是在互联网上搜索时我找不到任何关于“是否可以以及如何”将未命名枚举中的枚举值导出到 C++ 模块的描述。
我所做的是正确的吗?