2012-03-02 4 views
3

그래서, 내가 NSArrays 많이 사용하기 때문에 내가 여기에 매크로를 기반으로, 전달 프리미티브에서 배열을 생성하는 매크로를 만들려고 시도하기로 결정 그래서 기본적으로 자동 권투 NSArray?

#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]; 
} 

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

, 내가 무엇을 물어, 어떻게 variadic 매크로, 매크로에 전달 된 각 인수 작업을 수행 할 수 있습니다?

+0

전혀 없습니까? –

답변

1

이것은 질문에 대한 직접적인 대답은 아니지만 ... 아마도 원시 기능에 대한 자동 차단 기능을 포함하는 LLVM 4.0을 기다려야할까요?

살펴보기 : http://blog.ablepear.com/2012/02/something-wonderful-new-objective-c.html

+0

흥미 롭습니다. 그러나 아직 답변이 없으므로이 답변을 수락하지 않겠습니다. LLVM 4.0이 나왔을 때 대답이 없으면이 대답을 받아 들일 것입니다. –

+0

autoboxing에 대해서는 특정 클래스를 인스턴스화하기위한 간결한 구문이 없습니다. 제가 누락되었거나 잘못된 링크를 게시 했습니까? – Chuck

+0

그냥 말했듯이, LLVM 4.0이 나왔습니다. 당신의 대답을 받아 들였습니다. –