【发布时间】:2011-07-04 19:38:41
【问题描述】:
我正在尝试节省一些时间/让我的代码可读。我有很多返回 BOOL 的“isXXX”消息。我不断添加更多“是”信息。是否可以通过列表制作一个在预编译时可扩展的宏。
我想指定: isMacro(1, 2, 3)。
对于其中的每一个,我希望宏将其扩展为完整的 -(BOOL)is1 {...}, -(BOOL)is2...
这似乎可以很好地利用预编译器宏扩展,但我不确定如何实现 isMacro(...) 部分。 (特别是在编译之前扩展成完整函数的 ...)。
--- 更新:
“is”方法都是动态计算的,但都是通用的。
我正在针对枚举值测试单个变量并确定它是否相等。我不能@synthesize 它们,因为它是动态的。为方便起见,我将它们全部放在@property 中。我只想要像@synthesize 这样的东西,我可以在其中列出所有这些,并为每个 isXXX 方法创建一个动态响应。
另外,我不想运行 isCheck:(opMode)mode,因为没有预编译检查来确保它是一个有效的枚举值。
所有的 is 函数都采用以下格式:-(BOOL) isTurtle { return operationMode == Turtle; } 关键是为了简单起见,我希望它充当属性。因此,我不想要 is:(opMode)mode 之类的东西,我必须在其中指定 BOOL res = [obj is:Tutle];
【问题讨论】:
-
这适用于 C++、Objective-C 还是 C?您已在此处标记了所有三种语言。
-
你真正想做什么?
-(BOOL)is1 {...}, -(BOOL)is2...不是有效的 C 代码,那么为什么需要一个计算结果的宏? -
@David:实际上,您使用的是 Objective-C。如果您使用一种语言工作,请标记该语言。不要标记其他语言,因为您猜测它可能适用于它们。
-
你想要完成的事情根本不清楚。请展开。您正在测试的项目是什么?为什么你有这么多类似的测试?请至少发布其中一种方法作为示例。
-
是的,认真的。这个问题被标记为“c”,我对 C 了解很多,但事实证明这是一个关于目标 C 的问题解释得不好,所以我浪费时间看这个。
标签: objective-c xcode macros