(즉 C#을에 포트 앱) 및 사용 바이트를 작성하고 내가 C++ 매크로를 사용 전환을 위해,이 (그게 간단한 예)처럼 보이는 :이 다음C++ - 매크로를 제거하는 방법은 무엇입니까? 나는 간단한 가상 머신을 만든
typedef t_sint_b32 int;
typedef t_sint_b16 short;
(...)
typedef t_sfloat_b32 float;
enum InstructionOpSize{b8,b16,b32,b64};
enum InstructionOpSign{s, u};
enum InstructionOpType{int_, float_};
enum InstructionFunc{MOV, ADD, SUB, ...};
#define CreateInstruction(size1, sign1, type1, size2, ...) ((size1) | (sign1 << 3) | (type1 << 4) | ...)
#define CASE_INSTRUCTION(size1, sign1, type1, size2, ..., operation) case CreateInstruction(size1, sign1, type1, size2, ...): ((t_##sign1##type1##size1) ARG1) operation ((t_##sign2##type2##size2) ARG2); break;
#define MULTI_CASE(size1, sign1, type1, ...)\
CASE_INSTRUCTION(size1, sign1, type1, b8, u, int_,...);\
(...)
CASE_INSTRUCTION(size1, sign1, type1, b64, s, float_,...);
#define MULTI_MULTI_CASE(...)\
MULTI_CASE(b8, u, int_,..);\
(...)
MULTI_CASE(b64, s, float_,..);
그리고 거대한 스위치는 다음과 같습니다
switch(opcode){
MULTI_MULTI_CASE(ADD, +=);
MULTI_MULTI_CASE(SUB, -=);
MULTI_MULTI_CASE(MUL, *=);
(...)
}
당신은 작은 노력으로 생성 된 코드의 많은 (변수의 10 종류가 볼 수있는 방법 - 8 int 치의 2 수레 - 4 개 기능 코드는 10 개 * 10 개 * 4 개 라인),하지만 미래에 나는 매크로를 지원하지 않는 언어로 옮기고 싶다. (나는 C#이나 Java를 생각하고있다.) 내가 생각해 낸 아이디어는 코드 생성기를 만들어서 vm 코드에 붙여 넣을 코드를 생성하지만 코드를 읽을 수 없으며 sth을 변경하고 유지하기가 어려울 것입니다. 어쩌면 공유 할 멋진 아이디어가 있을까요? :)
, 나는 당신이 그것으로 것을 할 수 있었던 확신 손 :)으로 코드를 구조 조정하는 것입니다. –