FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Objective-CからC++を動かす

Objective-CからC++を動かそうとした。
やりたいことができなかったし、今後そうそう使うことはないだろうけど、もしかしたらいつか必要になるかもしれないのでメモしとく。

ios - How to include C++ headers in an Objective C++ header? - Stack Overflow

↑この記事がすごく参考になった。

(1)関数を呼び出す
{
    NSInteger number = _cppMembers->member1.getNumber();
    NSLog(@"number = %ld",(long)number);
}
↑呼び出し部分はこんなの。ほぼそのままなので他のコードは略。

(2)引数(文字列)を渡す
{
    NSString *text = @"Hello, C++!";
    std::string textcpp = std::string([text UTF8String]);
     _cppMembers->member1.say(textcpp);
}
↑呼び出し元(Objective-C++で拡張子はmm)はこんな感じでNSStringを変換する必要がある。
class CPPClass
{
public:
    void say(string word)
    {
        cout << word << "\n";
    }
};
↑受け取る CPPClass.h はこんな感じでOK。

(3)返り値(文字列)をもらう
{
    std::string answercpp = _cppMembers->member1.getAnswer();
    NSString *answer = [NSString stringWithCString:answercpp.c_str() encoding:[NSString defaultCStringEncoding]];
    NSLog(@"answer=%@",answer);
}
↑返ってきた文字はこんな感じでNSStringにできる。
class CPPClass
{
public:
    string getAnswer()
    {
        return "Hi, Objective-C++!";
    }
};
↑C++側はこんな感じで返り値を渡せる。

(4)C++ってヘッダーだけでいいの?
C++のコードを見るとヘッダーに全部書いてたりするけどいいの?XcodeでC++のファイルを追加すると実装側(.cppファイル)も生成されるし?
どうなってんのかな?と思って調べたら↓こんな記事があった。

C++ ヘッダとソースでファイルを分ける 基本編


なるほど〜。
まあ二度と使わないと思うけど。

<< Switch版フォートナイトの二段階認証  TopPage  MPSでsoftmax関数を使う >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1189-71573571




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad