はじめに
Objective-C と C++ が混在できる Objective-C++ という魅力的な響きに誘われて、iPhone 上で Boost を動かすってのをやってみました。
やったこと
Boost.Asio が iPhone(シミュレータ)上で動いてます!
解説
Boost の導入に関しては以下のエントリが大変参考になりました。
感謝感謝です (-人-)。
まず、TextView を配置して ViewController と紐付けしておきます。
Objective-C と C++ を混在させるためには、ソースファイルの拡張子を .m から .mm に変えるだけで OK なので、ViewController.m を ViewController.mm とします。
そして、以下の様なコードを書きます。
#import "ViewController.h" #include <boost/asio.hpp> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; boost::asio::ip::tcp::iostream s( "www.boost.org", "http" ); s << "GET / HTTP/1.0\r\n"; s << "Host: www.boost.org\r\n"; s << "\r\n"; s << std::flush; std::string buf, html; while( std::getline(s, buf) ) { html += buf; } const auto csText = [[NSString alloc] initWithCString:html.c_str() encoding: NSUTF8StringEncoding]; _textView.text = csText; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
boost.org に http でアクセスして応答をもらってそれを TextView に流し込んでいます。Boost.Asio は libboost_system.a とのリンクが必要なので、Project の TARGETS > Summary > Linked Frameworks and Libraries から追加しておくのお忘れなく。
終わりに
たったこれだけ、これだけで C++ / Boost が使えてしまうとは…。ちなみに、Objective-C++ では auto で NSString* を推論できました。とても便利です。