auto 之前的 private class 实例

Instance of private class before auto

我正在尝试找到如何实例化私有子类的元素 "before auto",那么如何使主类的第二行正常工作:

class A{
private:
    class B{
    public:
        void f(){};
    };

public:
    static B getB(){ return {};};
};
int main(){
    auto x1 = A::getB();
    A::B x2 = A::getB(); // B is a private member of A , so i can't write A::B
}

这东西很少有用。我建议首先弄清楚 为什么 这样做而不是 如何 这样做。

无法让 A::B 在给定私有 BA 范围之外工作。但是你可以例如在朋友 class 中提供一个 public 别名,并使用类似的声明:

class A{
    // ...
    friend struct C;
};

struct C {
    typedef A::B B;
};

C::B x2 = A::getB();