9

假设我有两个类:

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;
    }
}

有没有办法可以指向ref内部 B 的成员?

喜欢,int B::* ptr = &(B::ref.x)或者类似的东西?

4

2 回答 2

5

时不时会被问到这个问题

是否禁止指向“内部结构”成员?

基本上,这可以说是 C++ 语言设计中相当明显的初始疏忽,由于该语言向更高层次的方向发展,此后一直被忽略。指向数据成员类型的指针可能被认为太低级而无法给予足够的关注。如果有一天发现此类指针已被弃用而不是进一步开发,我不会感到惊讶。

从链接的答案中重复我的陈述,每个 C++ 编译器中已经存在低级支持(因为无论成员“嵌套”多深,低级机制都是相同的 - 它只是成员的偏移量包含对象),但缺少相应的初始化语法。

于 2012-08-06T23:36:07.420 回答
-1

不会只使用普通int*指针吗?为什么它需要是成员指针?

void doSomethingToVal(int * val) 
{ 
    if(val) 
    { 
        std::cout << *val; 
    } 
} 

int *ptr = &(B::ref.x);
doSomethingToVal(ptr) ;
于 2012-08-06T23:28:54.573 回答