Как можно получить размер типа, для которого есть кодировка? - PullRequest
11 голосов
/ 27 ноября 2011

С учетом типа Objective-C type можно легко получить кодировку encoding и размер size типа:

const char *encoding = @encode(type);
size_t size = sizeof(type);

Поставь немного по другому, у нас есть сопоставления

@encode: type_t -> const char *
sizeof:  type_t -> size_t

Это поднимает два вопроса:

(1) Предположим, что вместо типа у нас есть только кодировка. Было бы неплохо получить отображение

sizeofencodedtype: const char * -> size_t

такой, что для каждого type_t type у нас есть

sizeofencodedtype(@encode(type)) = sizeof(type)

Такая функция уже существует? Если нет, то как можно построить его?

(2) В идеале мы могли бы инвертировать отображение @ encode , чтобы сделать отображение

decode: const char * -> type_t

но это не представляется возможным, поскольку type_t не является реальным типом Си. Думаю, я мог бы подождать, пока @ decode будет добавлен к языку, но это не очень реалистично и не требует времени. Но не должно ли быть возможным создание экземпляра типа во время выполнения с использованием его кодировки?

Ссылка: Руководство по программированию Objective-C Runtime - Типовые кодировки

1 Ответ

12 голосов
/ 27 ноября 2011

NSGetSizeAndAlignment () может сделать это за вас. Это также полезная функция, если вы пытаетесь просмотреть несколько типов в одной строке.

...