С учетом типа 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 - Типовые кодировки