我有以下课程:

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


现在,我需要在测试中访问InnerA类。
从理论上讲,我可以创建一个派生自A的测试类,并将A类的某些部分公开。我当然可以使用字段来执行此操作,但是不能使用内部类来执行此操作。

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

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

最佳答案

实际上,您可以继承和宣传该类。

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

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

int main() {

    expose::InnerA ia;

    return 0;
}


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

10-06 02:00