2013-06-29 3 views
1

의 내용을 차별화하는 방법, 그 노동 조합의 내용을 알 수난 그냥 궁금 조합

void readCommand(command cInput){ 
    if(cInput.u is char) print the content of array of array of char 
    else readCommand(cInput.u); //make a recursive call 
} 

제안 사항? 고마워요

참고 : struct 명령의 내용을 변경할 수 없습니다.

답변

0

수 없습니다. 그것이 노동 조합의 본질입니다. 필요한 경우 구조체에 공용체를 포함하고 구조체에 유형 표시기를 넣어야합니다.

0

수 없습니다. 기본 데이터가 무엇인지 가정하거나 현재 기본 유형이 무엇인지 알려줄 수있는 다른 정보에 액세스해야합니다. 적절한 기본 유형을 추출하는 것만 유효합니다.

0

이 개체에 대한 정보가없는 블랙 박스에서이 유형의 개체를받는 경우 struct command 구조를 변경하지 않고는이 작업을 수행 할 수 없습니다.

0

노동 조합을 사용하면 어떤 특정 객체가 노동 조합에 존재하는지 나타내는 일종의 구분 기호가 항상 필요합니다. enum 또는 객체의 특성을 알려주는 다른 값일 수 있습니다. 예를 들어

:

struct command{ 
    int *input; 
    int *output; 
    int type; // <-- e.g. this value is the union discriminator; 1 => word, 2 => subcommand 
    union{ 
    char **word; 
    struct command *subcommand; 
    } u; 
}; 
+0

진정한 영업 이익은 명시 적으로 그의 구조 –

+0

마우스 오른쪽을 변경할 수 없습니다 말했다. 그러나 이것은 개념을 보여줍니다. OP는 * 어떤 종류의 discriminator를 사용해야 할 것입니다. 그것은 그가 제공 한 맥락에서 분명하지 않은 "입력"또는 다른 외부 지표의 가치 일 수 있습니다. – Ziffusion

관련 문제