在C++中的编译时检索当前类类型

Retrieve current class type during compile time in C++

本文关键字:类型 检索 C++ 编译      更新时间:2023-10-16

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

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

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

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

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

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

请注意,当前类类型可能是cv限定的(因此,this指针可能指向cv限定类型,这意味着强制转换可能导致指向cv合格对象的指针)。如果需要的话,你可以很容易地使用remove_cv这样的类型特征来处理这个问题。