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

вообще ничего, а? –

ответ

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 вышел, принял ваш ответ. –