c++ - 如何公开大量 protected 内部类函数?

标签 c++ class

假设我有自己构建的类(由于篇幅原因我不会引用示例)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/

相关文章:

c++ - LoadLibrary() dll 的相对地址

c++ - 使用 ffmpeg 将 PCM-ALAW 数据转换为音频文件

php - 为什么命名空间不能在 PHP 所需的文件中工作?

java - java类/异常表的最大大小

ruby - 数字1上的实例方法从何而来

c++ - typedef 函数指针的容器

c++ - Android NDK 链接器 (GStreamer) - 链接器名称无效 -fuse-ld=gold

python - 如何将 pyqtgraph 图像示例集成到一个类中?

c++ - 使用 vector C++进行二进制搜索

c++ - 如何在 C++ 中编写内联相互抽象代码?