相关疑难解决方法(0)

如何在粘贴之前保证参数的完全宏扩展?

我有一个普通的宏:

#define mSwitch( Root, Case )  Root##_Case_##Case

#define mSpecialDisplay( what, Val )  mSwitch(mSpecialDisplay,what)(Val)
#define mSpecialDisplay_Case_Int(Val)    ...do stuff
#define mSpecialDisplay_Case_Float(Val)  ...do stuff
...more special cases
Run Code Online (Sandbox Code Playgroud)

如何保证变量Case在粘贴之前完全展开mSwitch

如果mSwitch传递一个文字值,它工作正常,但如果有多个间接层或中间操作,mSwitch最终会在完全展开之前粘贴其中一个.

我正在使用MSVC 2005.

有没有一种简单的方法可以确保参数在粘贴完成之前完全展开?

谢谢


好吧,举一个例子可能并不难:

  #define mMDebugInfo( ... ) mMDebugExp( mMDebugInfo_( 0, __VA_ARGS__ ) )

  #define mMDebugInfo_( C, ... ) mMAritize( mMSwitch( mMDebugInfo, mMMetaTrait( Detect, __VA_ARGS__ ) ), (C, __VA_ARGS__) )

  #define mMDebugInfoRep( C, ... ) mMXP##C( mMDebugInfo_ )mMXP##C((mMIInc(C),__VA_ARGS__)) //(mMExpDo(mMGlue( mM, C)##DebugInfo_(mMIInc(C),__VA_ARGS__))

  #define mMDebugInfo1( C, ... …
Run Code Online (Sandbox Code Playgroud)

c++ macros c-preprocessor

7
推荐指数
1
解决办法
3032
查看次数

标签 统计

c++ ×1

c-preprocessor ×1

macros ×1