我可以在可能的SDK中删除标头中的私有声明吗
Can I delete private declarations from headers in possible SDK?
我正在编写一个小游戏引擎,我需要为另一个类提供对一个类的方法的访问权限,并且这些方法不能从客户端代码中可见或访问。我认为这是常见的问题。
我们可以在C++中使用"friend"关键字来解决这个问题,但这是一个糟糕的解决方案,此外,许多其他语言都不提供这个关键字,比如C#(但C#有另一种方法可以对外部代码隐藏方法)。我们可以使用一些模式并相对限制访问次数。
但若我编写库,我可以简单地从头文件中删除这些方法的声明。这些方法不必从lib导出,它们将仅在内部以观察者模式使用,因此在运行时可能不太可能使引擎崩溃。
最后,问题是,准备将封装在SDK中的特殊版本的头(带有已删除的私有声明)是一种好方法,还是在我的情况下唯一的方法是使用friend关键字?
附言:如果你有一些关于SDK应该如何的信息,请留下链接。
这比friend
差得多,使用它或继承,或者更好地将这些方法分解到一个单独的编译单元中,您的代码只能访问该编译单元。
相关文章:
- 删除显式默认函数声明时的警告
- 删除在结构 c++ 中声明的数组元素
- 如果未声明,则由预处理器删除thread::hardware_concurrency
- 未定义与已删除与未声明的函数
- 模板函数可以使用带有删除的构造函数的声明类型
- 定义或声明类破坏者时,C 使用已删除的函数
- 删除堆栈上声明的对象
- 为什么当我使用"new"关键字声明数组指针时无法删除它
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 拆分函数的声明和定义,还是删除标头中的新运算符?
- 析构函数删除在 main 中声明的动态数组
- C :删除在堆栈上声明的结构的字段
- 结构sqlite3的sqlite3c++正向声明导致析构函数中删除时出现无效指针错误
- 为什么move构造函数既没有声明也没有用clang删除
- 为什么简单析构函数在使用基指针声明时不删除派生对象
- 如果我们只定义复制构造函数/oper=,为什么移动构造函数/move赋值没有隐式声明和定义为删除
- 我可以在可能的SDK中删除标头中的私有声明吗
- 错误:在此处声明unique_ptr(常量 unique_ptr&) = 删除;
- 为什么在声明移动分配时不删除复制分配
- 使用显式实例化声明删除反向指针会导致 std::bad_weak_ptr 异常