C++指向成员的成员?

Ser*_*rge 8 c++ class pointer-to-member

假设我有两个类:

class A
{
    int x;
    int y;
};


class B
{
    int z;
    A ref;
};
Run Code Online (Sandbox Code Playgroud)

假设我还有一个函数接受B的指针到成员的整数,如下所示:

void doSomethingToB(B* object, int B::* val)
{
    if(val)
    {
        std::cout << object.*val;
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否可以指向refB内部的成员?

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

AnT*_*AnT 5

这个问题不时被问到

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

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

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