在C ++编译期间检索当前类类型

时间:2014-04-23 11:27:29

标签: c++ macros c-preprocessor

是否可以创建一个C ++宏 - 如果在类的方法中调用 - 接受void*值并将其强制转换为当前类类型?

class Foo{
  void bar();
  void baz(){ void* pInst = some_magic_source(); SOME_MACRO(pInst)->bar(); }
};

解决方案应该适用于VC ++ 2012+和GCC 4.8 +。

(我需要将其作为更复杂的宏的一部分)

1 个答案:

答案 0 :(得分:3)

指向当前类类型的指针是this的类型,导致以下简单的宏:

#define SOME_MACRO(x) (static_cast<decltype(this)>(x))

请注意,当前类类型可能是cv限定的(因此,this指针可能指向cv限定类型,这意味着强制转换可能会导致指向cv限定对象的指针)。如果需要,您可以轻松使用remove_cv等类型特征来处理此问题。