不能为 CVOpenGLESTextureGetName 和 CVOpenGLTextureGetName 做 typedef

Can't do typedef neither for CVOpenGLESTextureGetName nor for CVOpenGLTextureGetName

我在 .cpp 文件中有一些跨平台代码,可以将 CVPixelBuffer 转换为 CVOpenGLESTextureRef/CVOpenGLTextureRef。为了使 CoreVideo 相关的功能跨平台,我在头文件中执行以下操作:

#ifdef IOS_SHARED_SUPPORT
#import <OpenGLES/EAGL.h>
#import <CoreVideo/CoreVideo.h>
#import <CoreVideo/CVOpenGLESTexture.h>
#import <CoreVideo/CVOpenGLESTextureCache.h>
#endif // IOS_SHARED_SUPPORT

#ifdef MAC_SHARED_SUPPORT
#import <CoreVideo/CoreVideo.h>
#import <CoreVideo/CVOpenGLTexture.h>
#import <CoreVideo/CVOpenGLTextureCache.h>
#import <AppKit/AppKit.h>
#endif // MAC_SHARED_SUPPORT

#ifdef IOS_SHARED_SUPPORT
typedef CVOpenGLESTextureRef CVOpenGLPlatformTexture;
typedef CVOpenGLESTextureCacheRef CVOpenGLPlatformTextureCache;
typedef CVOpenGLESTextureGetName CVOpenGLPlatformTextureGetName; // error!!!
#endif
#ifdef MAC_SHARED_SUPPORT
typedef CVOpenGLTextureRef CVOpenGLPlatformTexture;
typedef CVOpenGLTextureCacheRef CVOpenGLPlatformTextureCache;
typedef CVOpenGLTextureGetName CVOpenGLPlatformTextureGetName; // error!!!
#endif

它说 "Unknown type name 'CVOpenGLESTextureGetName'; did you mean 'CVOpenGLESTextureRef'?",尽管 <CoreVideo/CVOpenGLESTexture.h> 被包括在内,并且 CVOpenGLESTextureRef 可以在 typedef 中使用。

不能对函数进行类型定义吗?
你能建议一些实验吗?
提前致谢。

Can't functions be typedef'ed?

函数? No. Function types 然而可能是别名。您可以使用 decltype 运算符获取函数类型:

typedef decltype(CVOpenGLESTextureGetName) CVOpenGLPlatformTextureGetName;

CVOpenGLPlatformTextureGetName将成为GLuint(CVOpenGLESTexture)的别名,CVOpenGLESTextureGetName的函数类型。

上面的内容当然不是你想要的,因为我怀疑你只是想给这个函数起另一个名字。您可以使用指向它的 constexpr 指针来做到这一点:

constexpr auto* CVOpenGLPlatformTextureGetName = &CVOpenGLESTextureGetName;

就是这样。 CVOpenGLPlatformTextureGetName 将在编译时评估为 "another name" 用于初始化它的函数。