假设我有两个类:
class A
{
int x;
int y;
};
class B
{
int z;
A ref;
};
假设我还有一个函数接受B的指针到成员的整数,如下所示:
void doSomethingToB(B* object, int B::* val)
{
if(val)
{
std::cout << object.*val;
}
}
我是否有办法指向B内ref
的成员?
喜欢,int B::* ptr = &(B::ref.x)
还是类似的?
答案 0 :(得分:4)
不时会问这个问题
Is Pointer-to- " inner struct" member forbidden?
基本上,这可以描述为C ++语言设计中一个相当明显的初始疏忽,由于语言在更高层次的方向发展,因此一直被忽略。指针到数据成员类型的指针可能被认为太低,无法给予足够的关注。有一天我发现这些指针已被弃用而不是进一步发展,我不会感到惊讶。
要从链接的答案中重复我的声明,每个C ++编译器中都存在低级别支持(因为无论成员“嵌套”多深,低级机制都是相同的 - 它只是偏移量包含对象的成员),但缺少相应的初始化语法。
答案 1 :(得分:0)
不只是使用普通的int*
指针吗?为什么需要成为成员指针?
void doSomethingToVal(int * val)
{
if(val)
{
std::cout << *val;
}
}
int *ptr = &(B::ref.x);
doSomethingToVal(ptr) ;