일반적으로 동적 유형 지정 프로그래밍 언어에서 개체 구조체에는 개체 유형을 식별하는 데 사용되는 태그 필드가 있습니다. 예를 들어 :C 스위치 문에서 포인터를 사용할 수있는 방법이 있습니까?
struct myObject {
int tag;
...
}
는 그래서는 태그 필드를 기준으로 switch 문을 사용하여 다른 작업을 수행하기 쉽습니다. 예를 들어 : 내 경우 대신 내가 그 객체를 나타내는 클래스를 가리키는 무효 *의 ISA 포인터를 사용 INT 태그 필드에
switch (obj->tag) {
case OBJ_INTEGER: ...
case OBJ_STRING: ...
case OBJ_FUNC:...
}
. 잘 작동하는 모든 것은 우아한 switch 문을 사용하는 대신 일련의 if/else 문을 사용해야한다는 것을 기대합니다. 예를 들어 :
if (obj->isa == class_integer) {
...
} else if (obj->isa == class_string) {
...
} else if (obj->isa == class_func) {
...
}
나는 내가 C 스위치 문 내부 포인터를 사용할 수 없다는 것을 알고 있지만 나는 if 문 일련의 속도를 빠르게하기 위해 일부 영리한 트릭을 사용할 수 있는지 궁금.
와
switch
을 대체 할 수 ? 이미 컴파일러가 그렇게하지 않았습니까? –상수가 아닌 표현식을'case' 레이블로 사용할 수 없습니다. –
@EugeneSh. 나는 OP가 이미 그것을 알고 있다고 생각하니? :) –