我有一些相互继承的类,但它们使用模板继承。我想要的是有效地获取一个指针和/或对其中一个基类的引用,就好像它是依赖于模板的其他可能的派生类之一
class a1
{
public:
int a;
virtual void func()
{
}
// other non virtual functions ...
};
class b1
{
public:
//no members or virtual functions
//other non virtual functions ...
};
class a2
{
public:
int a;
// ...
};
template < class T1 >
class derived : public T1,
public a2
{
int a;
// ...
};
派生类可以从类 a1 或类 b1 继承,这主要是为了在派生中节省空间,因为 b1 是一个空白类,因此当派生类使用模板参数 b1 实例化时,它不会承载数据成员的额外负载和 a1 的虚函数。
但是我现在想从 derived(a1) 获取指针或引用,它实际上是类型 derived(b1) 的指针或引用。
我真正想要的是关于执行 offsetof() 的“好”方法的帮助,但是使用继承我可以获得 offsetof() a2,我假设这是派生的(b1)的一个很好的指针,因为b1 是一个空白类。
我试图获取 derived(a1) 对象的指针,然后添加到 sizeof(a1) 上,希望这将是正确的位置,但想知道是否有其他人有更好的建议。
最佳答案
据我了解你,你有例如一个指向 derived
derived<a1>* instance = whatever();
a1* pointer = instance;
然而,建议您显式转换。由于此类始终是安全的并且可以在编译时解析,因此请使用 static_cast。
a1* pointer = static_cast<a1*>(instance);
执行摘要:指针算术是你不应该为遍历类层次结构而做的事情。有 static_cast 和 dynamic_cast 可用于此目的:当您尝试做一些危险的事情时,它们会警告您或出错,并且通常比您拥有更多关于确切内存布局的知识。
编辑:您编辑了问题以表明您想要从派生
关于c++ - 在 C++ 中获取属于另一个具有多重继承的类的类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877007/