[英]Why do we define C++ types as void for the Objective-C compiler in LLVM (while it is okay for the C++ compiler to see objective-C interfaces)?
當我在 C++ 的 Objective-C 包裝器的頭文件中偶然發現這幾行相當有趣的代碼行時,我正在瀏覽一個使用 C++ 庫的 iOS 項目的源代碼:
#ifdef __OBJC__
#ifndef __cplusplus
typedef void VisageTracker;
typedef void FaceData;
typedef void DemoFrameGrabber;
typedef void FDP;
typedef void VsImage;
#endif
#endif
@interface TrackerWrapper : NSObject {
CustomGLView *glView;
#ifdef __cplusplus
VisageSDK::VisageTracker* tracker;
VisageSDK::FaceData trackingData;
DemoFrameGrabber *demoFrameGrabber;
DemoObserver *demoObserver;
int glWidth;
int glHeight;
bool inGetTrackingResults;
#endif
}
我立刻VisageTracker, FaceData, DemoFrameGrabber, FDP, VsImage
一個問題:為什么所有的 C++ 類型,如VisageTracker, FaceData, DemoFrameGrabber, FDP, VsImage
被 Objective-C 編譯器定義為void
?
我很好奇 LLVM 是如何在這里進行編譯的。 頭文件似乎會經過兩次,一次由 C++ 編譯器處理,一次由 Objective-C 編譯器處理。
問題:為什么我們必須對 Objective-C 編譯器隱藏 C++ 類型,但 C++ 編譯器可以看到 Objective-C 接口(不僅如此,我們還可以將 C++ 的東西“注入”接口中)?
我嘗試刪除這些行
#ifdef __OBJC__
#ifndef __cplusplus
typedef void VisageTracker;
typedef void FaceData;
typedef void DemoFrameGrabber;
typedef void FDP;
typedef void VsImage;
#endif
#endif
之后代碼並沒有無法編譯:它似乎沒有這些行就可以正常工作。 因此我得出結論,這些線可能在那里,因為
或/和
因為C++
和Objective-C
是不同的語言。 它們只能在Objective-C++
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.