虚基类翻译无法正确处理参数为虚基类的虚函数
由这样的两个虚基类
struct BaseA {
virtual ~BaseA() = default;
virtual int a() = 0;
};
struct BaseB {
virtual ~BaseB() = default;
virtual int b(BaseA &a) = 0;
};
在 Cpp API 中生成的 BaseB 类型中, 传给 C 层的静态函数实现是
inline int BaseB::c_b(void *self, ::C_BaseA* a) {
return reinterpret_cast<BaseB *>(self)->b(BaseA(*a));
}
这时存在对于 (翻译出的) 抽象类 BaseA 的实例化 BaseA(*a), 无法通过编译.
但是无论如何, 这里都需要将 C 类型的参数 C_BaseA *a 转换成翻译后 Cpp 类型的引用 BaseA &, 否则无法用来调用用户实现的 b 方法.
Edited by 李祥泽