Với một Objective-C loại type
, người ta có thể có được encodingencoding
và kích thước size
loại một cách dễ dàng:Làm cách nào để có được kích thước của một loại mà một loại có mã hóa?
const char *encoding = @encode(type);
size_t size = sizeof(type);
Đặt một chút khác nhau, chúng ta có ánh xạ
@encode: type_t -> const char *
sizeof: type_t -> size_t
Điều này đặt ra hai câu hỏi :
(1) Giả sử rằng thay vì có loại, chúng tôi chỉ có mã hóa. Nó sẽ được tốt đẹp để có được một ánh xạ
sizeofencodedtype: const char * -> size_t
như vậy mà cho mỗi type_ttype
chúng tôi có mà
sizeofencodedtype(@encode(type)) = sizeof(type)
Có một chức năng như vậy đã tồn tại? Nếu không, làm thế nào có thể đi về xây dựng một?
(2) Lý tưởng nhất là chúng ta có thể đảo ngược @encode mapping để tạo ra một bản đồ
decode: const char * -> type_t
nhưng điều này dường như không được tốt vì type_t không phải là một loại C thực sự. Tôi đoán tôi có thể đợi @decode để thêm vào ngôn ngữ, nhưng điều đó không thực tế hoặc nhạy cảm với thời gian. Nhưng không thể khởi tạo một kiểu khi chạy bằng mã hóa của nó?
Tài liệu tham khảo: Objective-C Runtime Programming Guide - Type Encodings
Cảm ơn bạn! Đây là _exactly_ những gì tôi cần. –
Tôi đã dành hai giờ để cố gắng tìm ra những cách khác nhau để nói điều này và vấp phải nó từ một câu hỏi giới thiệu. Cảm ơn bạn! –