小编Ane*_*ton的帖子

可以自动从模板类型中获取基类的类型吗?

我正在尝试使用模板元编程来确定基类.有没有办法自动获取基类而不明确专门为每个派生类?

class foo { public: char * Name() { return "foo"; }; };
class bar : public foo { public: char * Name() { return "bar"; }; };

template< typename T > struct ClassInfo { typedef T Base; };
template<> struct ClassInfo<bar> { typedef foo Base; };

int main()
{
  ClassInfo<foo>::Base A;
  ClassInfo<bar>::Base B;

  std::cout << A.Name();  //foo
  std::cout << B.Name();  //foo
}
Run Code Online (Sandbox Code Playgroud)

现在任何自动方法都需要选择第一个声明的基数,并且对于私人基地会失败.

c++ templates metaprogramming

9
推荐指数
3
解决办法
9245
查看次数

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

我有一个普通的宏:

#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++ ×2

c-preprocessor ×1

macros ×1

metaprogramming ×1

templates ×1