Экземпляр частного класса перед авто - PullRequest
2 голосов
/ 05 февраля 2020

Я пытаюсь найти, как создать экземпляр элемента частного подкласса "перед авто", и как заставить вторую строку основного работать нормально:

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
}

1 Ответ

2 голосов
/ 05 февраля 2020

Было бы довольно редко, чтобы это было полезно. Я бы рекомендовал сначала выяснить , почему делает это, а не как сделать это.

Нет способа заставить A::B работать за пределами A отдано личное B. Но вы можете, например, предоставить псевдоним publi c в другом классе и использовать аналогичное объявление:

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

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

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