使受保护的内部 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 功能。
我有以下 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 功能。