使受保护的内部 class public

Make protected inner class public

我有以下 class:

class A
{
protected:
    class InnerA {};
};

现在我需要在测试中访问 InnerA class。 从理论上讲,我可以创建一个从 A 派生的测试 class 并制作 A 的某些部分 class public。我当然可以用字段来做到这一点,但不能用内部 classes.

有没有办法从 A class 层次结构(所有 class 派生自 A)外部查看受保护的 InnerA class?我希望能够写:

Test(MyTest, InnerATest)
{
    TestA::InnerA x;
    x.DoSth();
}

事实上,您可以继承和宣传class。

class A
{
protected:
    class InnerA {};
};

struct expose : A {
    using A::InnerA;
};

int main() {

    expose::InnerA ia;

    return 0;
}

就像基地的任何其他受保护成员一样。这是标准的 C++。

如果您想为另一个 class 或函数公开 class A 的非 public 部分,您可以尝试使用 friend 关键字:

class A
{
protected:
    friend class B;
    friend void f();
    int x;
};

class B
{
public:
    void sayX()
    {
        A a;
        a.x = 12;
        std::cout << a.x << std::endl;
    }
};

void f()
{
    A a;
    a.x = 11;
    std::cout << a.x << std::endl;
}

如果你想把那个字段公开给所有人,那么我认为我们最好把那个字段放到 public,或者让它有 get/set 功能。