我想定义一个宏或其他一些方法,我可以在编译时生成类似的变量声明。例如。我想声明50个NSString
变量,如下所示:#define VAR_GENERATOR (var_name, var_content) NSString* var_name = @"var_content"
并在for循环中执行:
for(NSString* string in [stringArray count])
{
NSString* var_name = [NSString stringWithFormat: @"string%d", iteration];
VAR_GENERATOR (var_name, string);
iteration++;
}
让我们说[stringArray count]
== 50所以我希望有50个NSString
变量声明如下:NSString* string1 = @"first string from array"
等等......
那么有一些预处理器方法可以达到这个目的吗?或者在Objective-C中可能还有一些其他更优雅,更灵活的编译时元编程工具?
答案 0 :(得分:1)
总之,没有。
您发布的是RUNTIME代码,而不是编译时代码。
如果要创建有序的字符串列表,请使用可变数组。这就是它的用途。
答案 1 :(得分:1)
出于多种原因,使用编译时构造无法完成您想要做的事情;
根本原因是var_name
的内容在编译时是未知的,因此编译器无法知道甚至应该命名的变量。但即使是这种情况,变量名冲突怎么办?如果编译器允许这样,那么堆栈布局会是什么,因为局部变量的数量是未知的?
如果能够这样做,请允许我添加甚至,然后您的变量将在本地范围内声明,并且不会在for
循环之外访问
在你的位置,我会尝试回到你真正想要完成的事情,并思考是否需要运行时构造。
如果答案是肯定的,(您是否尝试为某种语言构建解释器?),那么我们就可以使用工具将任意名称映射到值,例如NSMutableDictionnary
或std::map
。
TL; DR: 否,也许你可以扩展一下你想要完成的事情。