是否可以创建一个C ++宏 - 如果在类的方法中调用 - 接受void*
值并将其强制转换为当前类类型?
class Foo{
void bar();
void baz(){ void* pInst = some_magic_source(); SOME_MACRO(pInst)->bar(); }
};
解决方案应该适用于VC ++ 2012+和GCC 4.8 +。
(我需要将其作为更复杂的宏的一部分)
答案 0 :(得分:3)
指向当前类类型的指针是this
的类型,导致以下简单的宏:
#define SOME_MACRO(x) (static_cast<decltype(this)>(x))
请注意,当前类类型可能是cv限定的(因此,this
指针可能指向cv限定类型,这意味着强制转换可能会导致指向cv限定对象的指针)。如果需要,您可以轻松使用remove_cv
等类型特征来处理此问题。