不能为 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" 用于初始化它的函数。
我在 .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" 用于初始化它的函数。