2012-03-02 102 views
3

所以,我用NSArrays了很多,所以我决定尝试创建,将创建传递原语的数组宏的基础上,宏这里:自动装箱NSArray?

https://bitbucket.org/snej/myutilities/src/319441e240fa/CollectionUtils.h

#define $array(values...) ({ void *v[] = { values }; const char *encodings[] = { /* how do I get the @encode-ings for each? */ }; _boxArray(v, encodings, sizeof(values)/sizeof(void *))}) 

NSValue *_box(void *value, const char *encoding); // defined by CollectionUtils 

NSArray *_boxArray(void **values, const char **encodings, int count) 
{ 
    id objects[count]; 

    for (int i = 0; i < count; i++) { 
     // how can I box all of the values that need boxing? 
     objects[i] = _box(values[i], encodings[i]); 
    } 

    return [NSArray arrayWithObjects:objects count:count]; 
} 

所以基本上,我问的是,如何通过可变宏来对每个传递给宏的参数执行操作?

+0

什么都没有,呃? – 2012-03-03 00:17:22

回答

1

这不是你的问题的直接答案,但... 也许你应该等待LLVM 4.0,其中包括基元的自动装箱功能?

看一看:http://blog.ablepear.com/2012/02/something-wonderful-new-objective-c.html

+0

有趣。但是,我不会接受这个答案,因为它目前还没有。如果在LLVM 4.0出来时没有给出答案,我会接受这个答案。 – 2012-03-03 16:27:26

+0

我没有看到关于自动装箱的任何内容,只是用于实例化某些类的简明语法。我错过了什么,或者你发布了错误的链接? – Chuck 2012-03-05 01:25:11

+0

就像上面说的,LLVM 4.0已经出来了,接受了你的答案。 – 2012-07-26 12:28:45