如果我有一个具有多个基的派生类,则每个基的每个 this 指针都将不同于派生对象的 this 指针,除了一个。给定继承层次结构中的两种类型,我想在编译时检测它们是否共享相同的 this 指针。像这样的东西应该可以工作,但不能:
BOOST_STATIC_ASSERT(static_cast<Base1*>((Derived *)0xDEADBEEF) == (Derived*)0xDEADBEEF);
因为它需要是一个“整数常量表达式”,并且根据标准只允许整数转换(这很愚蠢,因为如果没有使用虚拟继承,它们只需要编译时间信息)。尝试将结果作为整数模板参数传递时也会出现同样的问题。
我能做的最好的事情是在启动时检查,但我需要在编译期间的信息(让一些深入的模板黑客工作)。