假设我有自己构建的类(由于篇幅原因我不会引用示例)X,并且在 protected 部分中有一个类 Y(来 self 无法修改的外部库,也不能使用类的继承因为成员定义是隐藏的)。
Y 类有大约 40 个函数。其中 20 个我不希望用户能够访问或修改,因为它会导致功能损坏(目前被 X 类中的 protected 状态阻止),但我希望用户能够访问其他 20 个功能,因此修改类 Y(几乎,就好像他们可以直接访问减去所谓的“危险”函数)。
如果不在 X 类中写出与 Y 类完全相同的 20 个函数,是否有更简单快捷的方法来授予用户访问这 20 个左右函数的权限(比如某种函数转发能力或其他)?
扩展注释:
这有点棘手,因为有一个库函数采用 Y 类(但不接受 X 类,人们提示我在类之间转换)。类 X 应该为类 Y 的操作自动化和存储信息,能够为该函数返回一个(常量)类 Y,并允许用户修改简单的事情(例如对象的位置) 但不是自动化的东西(图像、图像循环)。
X 类是 Y 类的一种类型,在自动化函数中工作,但不允许 X 类返回 Y 类(无法引用自身,Y 类的修改版本,再次,人们会提示我在类之间进行转换)。
最佳答案
为什么不能从 Y
类继承?如果您完全可以使用它,则可以继承它。
您可以使用非公共(public)继承(可能是私有(private)继承)解决您的问题,然后通过 using
声明从 Y
提升您想要的功能:
class Y
{
public:
void FunctionIWantToExpose();
void AnotherFunctionIWantToExpose();
void FunctionIDontWantToExpose();
}
class X : private Y
{
public:
using Y::FunctionIWantToExpose;
using Y::AnotherFunctionIWantToExpose;
}
int main()
{
X x;
x.FunctionIWantToExpose(); // This is legal and calls Y::FunctionIWantToExpose()
x.FunctionIDontWantToExpose(); // This will cause a compile error
return 0;
}
编辑:如果您想提供对内部 Y
对象的访问,您可以使用 X
中的附加成员函数轻松实现:
const Y& GetY() const
{
return *this;
}
这在 X
类中起作用,因为基类 Y
可以在那里访问。另一方面,仅返回 Y&
的 GetY()
版本是完全不可取的,因为类客户端可以使用它来修改您的 X
使用您要阻止的 Y
方法的对象。
关于c++ - 如何公开大量 protected 内部类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880570/