Как можно получить размер того типа, для которого есть кодировка?

Учитывая тип 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 Руководство по программированию времени выполнения - Тип кодировки

Ответы

Ответ 1

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