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

Учитывая тип 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 мы имеем that

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

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

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

decode: const char * -> type_t

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

Ссылки: Objective-C Runtime Programming Guide - Type Encodings

11
задан Nate Chandler 30 June 2013 в 13:31
поделиться