指向多重继承中继承的数据成员的指针
Pointer to inherited data member in multiple inheritance
>我正在尝试查看是否有办法从具有多重继承的类中获取指向数据成员的指针。有没有办法消除它们的歧义并仍然获得正确的偏移量?
struct Foo
{
int BarData;
};
struct FooBarBaseA : public Foo
{
int DataA;
};
struct FooBarBaseB : public Foo
{
int DataB;
};
struct FooBar : public FooBarBaseA, public FooBarBaseB
{
};
Bar FooBar::* p1 = &FooBar::FooBarNodeA::BarData; // should be 0?
Bar FooBar::* p2 = &FooBar::FooBarNodeB::BarData; // should be 4 or 8?
编辑:我确实希望它们是 2 个独立的值,但两者都
int FooBar::FooBarBaseA::Foo:: *p1 = &FooBar::FooBarBaseA::Foo::BarData; and
int FooBar::FooBarBaseB::Foo:: *p2 = &FooBar::FooBarBaseB::Foo::BarData;
使用相同的值,如果继承树不是虚拟的,它们不应该是不同的偏移量吗?
我相信
这段代码演示了您要查找的内容:
#include <iostream>
#include <typeinfo>
using std::cerr;
struct Foo
{
int BarData;
};
struct FooBarBaseA : public Foo
{
int DataA;
};
struct FooBarBaseB : public Foo
{
int DataB;
};
struct FooBar : public FooBarBaseA, public FooBarBaseB
{
};
int main(int argc,char **argv)
{
int FooBar::* p1 = static_cast<int FooBarBaseA::*>(&Foo::BarData);
int FooBar::* p2 = static_cast<int FooBarBaseB::*>(&Foo::BarData);
FooBar foo;
foo.FooBarBaseA::BarData = 1;
foo.FooBarBaseB::BarData = 2;
cerr << (foo.*p1) << "n";
cerr << (foo.*p2) << "n";
return 0;
}
输出:
1
2
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 共享 C++ 的数据成员指针
- C++数据成员:值与指针
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 如何在C++中使用类对象访问指针数据成员
- 将指向数据成员的指针传递给 std::invoke 时有哪些用例和有用性?
- 通过指针算法访问结构数据成员
- 如何强制实施有关指针数据成员的常量正确性
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- constexpr 偏移量,带有指向成员数据的指针
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 将数据成员的指针传递给基类构造函数是否安全?
- 虚拟指针大小因类数据成员而异
- "new"不会将内存分配给作为类的数据成员的指针
- 关于Lambdas,转换以功能指针以及私人数据成员的可见性
- 向上转换指向数据成员及其多态行为的指针
- 指向数据成员转换的 Constexpr 指针
- 关于C++中指向数据成员的指针的一些混淆
- C 细分故障访问类数据成员,而无需明确使用指针