我在.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
它说“未知类型名称'CVOpenGLESTextureGetName';你的意思是'CVOpenGLESTextureRef'?”,尽管包括<CoreVideo/CVOpenGLESTexture.h>
,CVOpenGLESTextureRef
可以用于typedef。
不能将函数设置为typedef?
你能建议一些实验吗?
提前谢谢。
答案 0 :(得分:1)
不能使用typedef功能吗?
功能?不可以。功能类型 但可能是别名。您可以使用decltype
运算符获取函数类型:
typedef decltype(CVOpenGLESTextureGetName) CVOpenGLPlatformTextureGetName;
CVOpenGLPlatformTextureGetName
将成为GLuint(CVOpenGLESTexture)
的别名,CVOpenGLESTextureGetName
的函数类型。
上面当然没有做你想要的,因为我怀疑你只想给这个功能另一个名字。您可以使用指向它的constexpr
指针来执行此操作:
constexpr auto* CVOpenGLPlatformTextureGetName = &CVOpenGLESTextureGetName;
就是这样。 CVOpenGLPlatformTextureGetName
将在编译时评估为&#34;另一个名称&#34;对于使用它初始化它的函数。