Ответ 1
NSGetSizeAndAlignment() может сделать это за вас. Это также полезная функция, если вы пытаетесь нащупать несколько типов в одной строке.
Учитывая тип Objective-C type
, можно получить encoding 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 не является реальным типом C. Думаю, я мог бы ожидать добавления @decode к этому языку, но это не очень реалистично или чувствительно к времени. Но должно ли быть невозможно создать экземпляр типа во время выполнения с использованием его кодировки?
Литература: Objective-C Руководство по программированию времени выполнения - Тип кодировки
NSGetSizeAndAlignment() может сделать это за вас. Это также полезная функция, если вы пытаетесь нащупать несколько типов в одной строке.