C ++指向成员的成员?

时间:2012-08-06 23:18:49

标签: c++ class pointer-to-member

假设我有两个类:

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)还是类似的?

2 个答案:

答案 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) ;