2014-01-29 3 views
0

간단한 해석기로 어떻게 작동하는지 더 자세히 배우고 있습니다.인터프리터 용 다중 인수 연산 코드 다루기

나는 두 가지 측면이 불투명하다.

다양한 인수의 opcode를 어떻게 처리해야합니까? 통역은 일반적으로이 다루는 것을

-Limits me to 3 args 
-Forces me to supply dummy args for opcodes taking less args 

무엇입니까 방법 (들) : 그러나

void execute(int opcode, int arg1, int arg2, int arg3, Machine m); 

이 :

내가 좋아하는 뭔가를 할 수?

나는 정수 배열을 밀어 넣을 수 있지만 더 좋은 방법이 있는지 궁금해하고 있습니다.

감사합니다.

답변

1

varargs 표기법을 사용하십시오.

void execute(int opcode, Machine m, int... args); 

을하고 지금 당신은 int 배열 (int[])처럼 args 작업 할 수 있습니다 :

같은 당신의 방법을 정의합니다.

이이 모든 표기법이 작동한다는 것을 의미 :

execute(opcode, m, arg1); 
execute(opcode, m, arg1, arg2); 
execute(opcode, m, arg1, arg2, arg3); 
execute(opcode, m, arg1, arg2, arg3, arg4); 

중요 사항 : 두 개의 동일한 유형의 매개 변수와이있는 경우 그 중 하나는 가변 인자는 다음 단수 뒤에 가변 인수를 넣어야 할 것입니다 하나는 모호성을 방지합니다.

Elliot은 정확하게 지적합니다. 다른 매개 변수가있을 때 마지막 매개 변수가되어야합니다.

+0

하나의 설명으로, 마지막 인수 만 가변 길이 일 수 있습니다. –

+0

@ElliottFrisch : 좋은 지적입니다. 같은 유형의 변수 만 중요하다고 생각했습니다. –

+0

다른 언어에서도 마찬가지 일 수 있습니다. varargs는 args를 완전히 선택적으로 만든다. 그래서'execute (opcode, m);도 유효하다. –