2012-03-02 68 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