@encode
의 반대 연산자가 있습니까?@codeode의 반대쪽
예를 들어, 이렇게하면 @encode(int)
, "i"
이됩니다. 이 작업을 수행하고 싶습니다. @decode("i") myInt = 5;
이 작업이 가능합니까? 이것을 처리 할 연산자가 있습니까?
@encode
의 반대 연산자가 있습니까?@codeode의 반대쪽
예를 들어, 이렇게하면 @encode(int)
, "i"
이됩니다. 이 작업을 수행하고 싶습니다. @decode("i") myInt = 5;
이 작업이 가능합니까? 이것을 처리 할 연산자가 있습니까?
No. @encode
은 유형을 취하며 C에서는 유형을 반환 할 수 없습니다. (typeof()
연산자는 GNU 확장이지만 C 문자열을 사용하지 않으므로 원하는 것은 불가능합니다.
두 가지 옵션이 있습니다. 하나는 코드를 다시 디자인하는 것입니다. 설계 문제.
두, 동적 메모리 할당을 사용하고 형식 문자열을 사용하고 그에 따라 메모리를 할당하는 함수를 직접 작성합니다.
음이, 그래 .. 가장 확실하게, 이 ...
있다 int five = 5;
__typeof(five) four = 4;
printf("@encode(int):%s\n", @encode(int));
printf("typeof(five):%s\n", @encode(__typeof(five)));
printf("typeof(four):%s\n", @encode(__typeof(four)));
➜
@encode(int):i
typeof(five):i
typeof(four):i
당신은 NSGetSizeAndAlignment을 사용할 수 있습니다 크기를 얻고 할당을해라.
NSUInteger size;
NSGetSizeAndAlignment(encoding, &size, NULL);
void* ptr = malloc(size);
if (strcmp(encoding, @encode(int)) == 0) {
*(int*)ptr += 2;
} else if (strcmp(encoding, @encode(float)) == 0) {
*(float*)ptr += 2.0;
}
free(ptr);
이 경로는 광기가 있습니다. C와 C에서 파생 된 언어는 이러한 종류의 역동적이고 내성적 인 행동을 위해 설계되지 않았습니다. – bbum
libffi를 사용하여 주위를 둘러보고 싶다면 다음과 같이 할 수 있습니다. [Mike Ash on Blocks] (http://www.mikeash.com/pyblog/friday-qa-2011-05-06-a) -tour-of-mablockclosure.html), 다른 변수의 유형에 따라 실제로 컴파일 할 때 변수를 선언 할 수는 없습니다. –