日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++调用Object-C

發布時間:2023/12/14 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++调用Object-C 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用背景

在iOS SDK的開發中,我們有時候會使用ios平臺上面實現的某些函數功能。比如:H264的解碼。所以我們會在C++語言中去調用Objective-C語言編寫的一些函數方法。

調用結構

Created with Rapha?l 2.1.0C++ *.cppC++/oc *.mm

實現方式

1.按照C++語言的方式準備.h 和 .cpp文件。
2.將需要調用的Objective-C方法放入.cpp文件中。
3.將.cpp文件后綴改為.mm文件。
一句話總結:按照C++的方式來寫代碼。如果文件中有調用Objective-C的方法,那么將文件后綴名改為.mm文件。

注:調用方法其實有很多,這篇文章只介紹了最簡單方便的一種方法。用最少的文件實現這個功能。如果要規范代碼架構,不喜歡C++和OC放在同一個文件中則還有別的方式我們可以后續交流。

代碼詳解

一共有3個文件:”main.c CppFile.h CppFile.mm”,代碼很簡單如下:
main.cpp

#include "CppFile.h" #include <memory>int main(int argc, char** argv) {std::shared_ptr<CppFile> cppfile(new CppFile());cppfile->print_cpp_Msg();cppfile->print_oc_Msg();return 0; }

CppFile.h

#ifndef __CPP_FILE__ #define __CPP_FILE__class CppFile { public:void print_cpp_Msg();void print_oc_Msg(); }; #endif

CppFile.mm 因為CppFile中使用OC相關的函數,所以我們需要import

#include <iostream> #import <Foundation/Foundation.h>#include "CppFile.h"void CppFile::print_cpp_Msg() {std::cout << "This is cpp file msg" << std::endl; }void CppFile::print_oc_Msg() {NSLog(@"This is object-c msg"); }

編譯及運行

在編譯的時候需要加上-framework Foundation的參數,否則會提示找不到”_NSLog”定義。

Compile:

#compile cpp file clang++ -g -O2 -Wall -std=c++11 -c main.cpp #compile oc file clang++ -g -O2 -Wall -std=c++11 -c CppFile.mm -framework Foundation #link object clang++ -o test main.o CppFile.o -framework Foundation

Run:

Lorys-MacBook-Air:oc-cpp lory$ ./test
This is cpp file msg <== C++ print
2017-08-17 20:46:29.513 test[11267:1497093] This is object-c msg <==oc print

使用限制

OC++ 沒有為OC類增加C++的功能,也沒有為C++類增加OC的功能。例如,不能用OC語法調用C++對象,也不能為OC對象增加構造函數和析構函數,也不能將this和self互相替換使用。類的體系結構是獨立的。C++類不能繼承OC類,OC類也不能繼承C++類。另外,多語言異常處理是不支持的。也就是說,一個OC拋出的異常不能被C++代碼捕獲,反過來C++代碼拋出的異常不能被OC代碼捕獲。

延伸閱讀

  • C++、Objective-C 混合編程

總結

以上是生活随笔為你收集整理的C++调用Object-C的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。