使受保护的内部类公开

时间:2017-06-05 10:26:54

标签: c++ googletest

我有以下课程:

    AFRAME.registerComponent('myCode', {
      init: function () {
        //whatever you want, remember that the scope here is not the window, 
        //but the element using this component ( now it'd be the a-scene)
      }
    });

现在我需要在测试中访问InnerA类。 从理论上讲,我可以创建一个派生自A的测试类,并将A类的某些部分设为public。我当然可以用字段来做,但不能用内部类来做。

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

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

2 个答案:

答案 0 :(得分:3)

事实上,你可以继承和宣传这个类。

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

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

int main() {

    expose::InnerA ia;

    return 0;
}

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

答案 1 :(得分:0)

如果您希望为另一个类或函数公开class A的非公开部分,可以尝试使用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;
}

如果你想向所有人公开这个字段,那么我认为我们最好将该字段公开,或者为它设置get / set函数。