不能为CVOpenGLESTextureGetName和CVOpenGLTextureGetName执行typedef

时间:2017-10-25 08:42:15

标签: c++ ios c-preprocessor core-video

我在.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?
你能建议一些实验吗?
提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

不能使用typedef功能吗?

功能?不可以。功能类型 但可能是别名。您可以使用decltype运算符获取函数类型:

typedef decltype(CVOpenGLESTextureGetName) CVOpenGLPlatformTextureGetName;

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

上面当然没有做你想要的,因为我怀疑你只想给这个功能另一个名字。您可以使用指向它的constexpr指针来执行此操作:

constexpr auto* CVOpenGLPlatformTextureGetName = &CVOpenGLESTextureGetName;

就是这样。 CVOpenGLPlatformTextureGetName将在编译时评估为&#34;另一个名称&#34;对于使用它初始化它的函数。