Objective-C オブジェクトのプロパティ同士をバインドしたいのですが、プロパティが c++ クラスになっています。プロパティは実際には数学的なベクトル クラスであり、ベクトル演算では演算子のオーバーロードが非常に役立つため、操作が簡単です。(Objective-C オブジェクトを使用してベクトル演算を行う良い方法さえ見当たらないのですが、ありますか?)
問題は、このベクター プロパティをバインドするとアプリがクラッシュすることです。以下に例を示します。
@interface M_Node : NSObject{
Vec3f pos;
M_Node *manipulator
}
@property Vec3f pos;
@end
@implementation
@synthesize pos;
@dynamic pos;
-(void)setPos:(Vec3f)newPos{
pos=Vec3f(newPos);
}
-(Vec3f)pos{
return Vec3f(pos);
}
- (id) init
{
self = [super init];
if (self != nil) {
[self bind:@"pos" toObject:self withKeyPath:@"manipulator.pos" options:nil];
}
return self;
}
Xcode による問題: タイプ 'Vec3f' (別名 'Vec3') のアトミック プロパティが、非自明な代入演算子を使用してセッターを合成する
Cinder の Vec3f クラスを使用します: http://libcinder.org/docs/v0.8.3/classcinder_1_1_vec3.html
問題は、目的の c で c++ オブジェクトをプロパティとしてバインドする方法、または可能でしょうか? 他に行く方法はありますか?(客観的なcできれいなベクトル、行列などの数学を行う方法がわかっている場合は、私に知らせてください。)
これは私がドキュメントで見つけたものです:
スカラー値と構造体値の KVC 変換 KVC メソッド valueForKey: および setValue:forKey: のデフォルト実装は、BOOL、char、double、float、int などのスカラー データ型、および NSPoint、NSRange、NSRect などの構造体の自動オブジェクト ラッピングをサポートします。Cocoa スクリプトが valueForKey: を呼び出して値を取得すると、KVC は必要に応じて値を NSNumber オブジェクト (スカラーの場合) または NSValue オブジェクト (構造の場合) に自動的に変換します。同様に、setValue:forKey: は、指定されたキーの適切なアクセサーまたはインスタンス変数に必要なデータ型を決定します。データ型がオブジェクトでない場合、適切な NSNumber または NSValue メソッドを使用して、渡されたオブジェクトから値が抽出されます。サポートされている型の表を含む詳細については、「キー値コーディング プログラミング ガイド」の「スカラーと構造体のサポート」を参照してください。
それでも、NSRect のような構造体のラッパーがあります。元の valueForKey をオーバーライドする方法があるかもしれません: そのため、Vec3f も処理できます。
したがって、これが新しい質問になります: valueForKey:とsetValue: forKey:をオーバーライドして、自分の c++ オブジェクトを処理できるようにする方法は?