宏观选择

Asl*_*986 0 c++

是否可以使用与此(错误)语法类似的内容进行宏选择?

#define FLAG MULT
#ifdef FLAG ADD
   int op(int a, int b) {return a + b;}
#endif
#ifdef FLAG MULT
   int op(int a, int b) {return a * b;}
#endif
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 8

你可以这样做:

#define ADD  0
#define MULT 1

#define FLAG MULT
#if (FLAG == ADD)
   int op(int a, int b) {return a + b;}
#elif (FLAG == MULT)
   int op(int a, int b) {return a * b;}
#endif
Run Code Online (Sandbox Code Playgroud)

但是,条件编译通常会导致悲伤(通常,"未使用"分支将最终无法维护,并且当您切换回使用它时会出现问题).

C++提供了更好的机制(运行时多态,模板等)来解决这种性质的大多数(但不是全部)问题.


ham*_*ene 7

#define ADD +
#define MULT *
//...
#define FLAG MULT
//...
int op(int a, int b) {return a FLAG b;}
Run Code Online (Sandbox Code Playgroud)