Автобокс NSArray? - PullRequest
       11

Автобокс NSArray?

3 голосов
/ 03 марта 2012

Итак, я часто использую NSArrays, поэтому я решил попытаться создать макрос, который будет создавать массив из переданных примитивов, основываясь на следующих макросах:

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

Итак, в основном я спрашиваю, как я могу с помощью макроса с переменным числом операций выполнить операцию с каждым из аргументов, передаваемых макросу?

1 Ответ

1 голос
/ 03 марта 2012

Это не прямой ответ на ваш вопрос, но ... Может быть, вам стоит подождать LLVM 4.0, который включает функцию автобокса для примитивов?

Посмотрите: http://blog.ablepear.com/2012/02/something-wonderful-new-objective-c.html

...