2017-10-25 10 views
1

.cppファイルにいくつかのクロスプラットフォームコードがあり、CVPixelBufferからCVOpenGLESTextureRef/CVOpenGLTextureRefに変換されています。 CoreVideo関連の機能クロスプラットフォームを作るために、私はヘッダファイルに次の操作を行いますCVOpenGLESTextureGetNameでもCVOpenGLTextureGetNameでもtypedefを実行できません

#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

関数はtypedefされていない可能性がありますか?

機能はありますか? No. 機能タイプただし、エイリアスがある可能性があります。

typedef decltype(CVOpenGLESTextureGetName) CVOpenGLPlatformTextureGetName; 

そしてCVOpenGLPlatformTextureGetNameGLuint(CVOpenGLESTexture)の別名、CVOpenGLESTextureGetNameの関数型になります:あなたはdecltype演算子を持つ関数型を得ることができます。

もちろん、上記のことはあなたが望むことをしません。なぜなら、あなたは関数に別の名前を与えたいと思うからです。あなたはそれにconstexprポインタであることを行うことができます。

constexpr auto* CVOpenGLPlatformTextureGetName = &CVOpenGLESTextureGetName; 

そして、それはそれです。 CVOpenGLPlatformTextureGetNameは、コンパイル時に初期化する関数の「別の名前」として評価されます。

+0

ありがとうございます! 'constexpr'を削除しようとしましたが、許可されていません。 'constexpr'修飾子はプリプロセッサーが本当の' CoreVideo'関数のオブジェクトコードを変更しないことを保証していますか? –

+1

@Olia_Pavliuk - これはプリプロセッサ修飾子ではありません。これは型システムの一部です。基本的には、ポインタは常に同じアドレスに評価されるコンパイル時定数式です。 – StoryTeller

関連する問題