我有以下代码,我正在使用 MSVC:
template <typename T>
void CanMock() {
class SimpleType {};
static_assert(sizeof(void(SimpleType::*)()) == sizeof(void(T::*)()),
"Can't mock a type with multiple inheritance or with "
"non-polymorphic base class");
}
int main() {
class base {};
class derived : public base {};
class derivedVirtual : virtual public base {};
CanMock<derived>();
CanMock<derivedVirtual>();
}
Run Code Online (Sandbox Code Playgroud)
in调用时通过,但调用时static_assert失败。CanMockderivedderivedVirtual
据我了解,断言尝试将 a 的类函数指针的大小SimpleType与 的类函数指针的大小进行比较derivedVirtual,
现在我的问题是:
derivedVirtual应该增加,因为其中存储了 vtable 指针(对吗?),但是为什么derivedVirtual继承 with 时类函数指针的大小会增加virtual?