Objective-C++
Boost.Spirit.Qiの内部でnilという名前のクラスが使われているので、Objective-C++の文脈(.mm拡張子のソースファイルや、.mmでインクルードされる.h)でこれを使おうとすると、Objective-Cのnilキーワードと衝突してコンパイルエラーになります。 このため、B…
NSObjectのperformSelectorは、Objective-Cのオブジェクトしか渡せないので、int型の値を渡すだけでもたいへんです。NSObjectを継承したInteger型みたいなのを作るか、NSValueを使っているひとが多いと思います。 今回は、intでもstd::vectorでも、C++のオブ…
id:melpon が書かないので代わりに書いちゃいます。 boost::shared_ptrは、環境によってはスレッドセーフなアクセスを行う処理のあたりで インラインアセンブラを使ってるのでiPhone開発で使おうとするとコンパイルエラーになってしまいます。 なので、<boo…
Objective-Cには名前空間がないので @interface HogeView ... @end struct Hoge { typedef HogeView View; }; みたいに書けば Hoge::View* view = [[Hoge::View alloc] initWithFrame:[window frame]]; 名前空間っぽく書けるなー、というのを今思いついた。
Xcode(GCC)には、「Call C++ Default Ctors/Dtors in Objective-C」というオプションがあります。 これを ON にすると、 Objective-C のクラスメンバに C++ クラスオブジェクトを持ったときに C++ クラスオブジェクトのコンストラクタとデストラクタが呼ばれ…
Objective-C と C++ のコードは、 *.mm 形式のファイルの中では混在させることができます。なので、 Objective-C のライブラリを C++ でラップしてしまえば、ほとんどが C++ で組めるようになります。 以下はその方法 *.h では混在コードを書けないので、 C+…
inline NSString* toNSString(const std::string& s) { return [[[NSString alloc] initWithCString:s.c_str() encoding:NSUTF8StringEncoding] autorelease]; } # はてなのスーパーpre記法に「objcpp」があったりします