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