标签: fakeit

虚拟继承和类函数指针大小

我有以下代码,我正在使用 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

现在我的问题是:

  • 我知道 a 的大小derivedVirtual应该增加,因为其中存储了 vtable 指针(对吗?),但是为什么derivedVirtual继承 with 时类函数指针的大小会增加virtual
  • 为什么在 clang …

c++ virtual inheritance mocking fakeit

5
推荐指数
0
解决办法
125
查看次数

标签 统计

c++ ×1

fakeit ×1

inheritance ×1

mocking ×1

virtual ×1