プリプロセッサを乱用しようとしている可能性があります。私は心に留めていることが可能であるかどうかを見たいと思う。Cプリプロセッサで@propertyの実装を生成する(プリプロセッサの文字を大文字にする)
私のクラスは、すべてが同じボディを持つ@propertiesを持っています。これらのボディをプリプロセッサマクロで生成したいと思います。例えば:
- (float) accelerometerSensitivity {
return [dict floatForSelector:_cmd or:1];
}
- (void) setAccelerometerSensitivity:(float) n {
[dict setFloat:n forSelector:_cmd];
[dict writeToFile:[self globalDataFilename] atomically:YES];
}
- (float) returnSpringTension {
return [dict floatForSelector:_cmd or:0];
}
- (void) setReturnSpringTension:(float) n {
[dict setFloat:n forSelector:_cmd];
[dict writeToFile:[self globalDataFilename] atomically:YES];
}
// set*ForSelector methods are in a category on NSMutableDictionary and depend on a function that translates selectors into strings:
// NSString* keyFromSelector(SEL selector);
アイデアはなく辞書へのキーとして文字列リテラル(または文字列定数)を用いる、Iは、セレクタ名の文字列を導出することです。このようにして、キーのスペルがプロパティ名と一致し、基本的に辞書キーのコンパイル時検証の利点が得られると確信しています。
私がしたいことは、SELECTOR_PROPERY(accelerometerSensitivity)
のようなもので、ゲッターとセッターに広げてください。プリプロセッサマクロとして実装する上での主な難点は、プロパティ名からセッター名を生成することです。私はプロパティ名の最初の文字を大文字にする必要があり、プリプロセッサでこれをどうするかわかりません。
ええ、それは私が考えているフォールバックです。 CPPが私が望むような操作を行う表現力を持っていないことを確認していただきありがとうございます。 – iter