c++ - 扩展现有类,如命名空间 (C++)?

标签 c++ code-organization

我用第二人称写作是因为这对你来说很容易。

您正在使用游戏引擎,并且真的希望特定的引擎类有一个执行“bla”的新方法。但是您不想将“游戏”代码扩展到“引擎”代码中。

所以您可以使用您的一种新方法从它派生一个新类,并将该代码放在您的“游戏”源目录中,但也许还有另一种选择?

所以这在 C++ 语言中可能是完全非法的,但您首先想到的是,“也许我可以通过我自己的头文件向现有类添加一个新方法,其中包括‘父’头文件和一些特殊语法。这是在使用 namespace 时可能,例如……”

假设你不能在多个头文件中声明一个类的方法(而且你非常确定你不能),还有哪些其他选项支持“中间件/引擎/库”和“应用程序”之间的明确划分',你想知道吗?

最佳答案

我唯一的问题是,“你添加的功能需要是成员函数,还是可以是自由函数?”如果你想做的事情可以使用类的现有接口(interface)来解决,那么唯一的区别就是语法,你应该使用一个自由函数(如果你认为那是“丑陋的”,那么......接受它并继续前进, C++ 不是为 monkeypatching 设计的)。

如果您试图了解该类的内部结构,这可能表明原始类缺乏灵 active (它没有公开足够的信息来让您从公共(public)接口(interface)执行您想要的操作).如果是这样的话,也许原始类可以“完成”,然后您又可以在其上放置一个免费功能。

如果这些都行不通,你只需要有一个成员函数(例如,原始类提供了你想要访问的 protected 成员,而你没有修改原始接口(interface)的自由)......只有然后求助于继承和成员函数实现。

要深入讨论(和解构 std::string'),请查看此 Guru of the Week "Monolith" class article .

关于c++ - 扩展现有类,如命名空间 (C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228404/

相关文章:

C++ Switch 语句输入

C++ 编程错误 : expected unqualified-id before "{" token

ruby-on-rails - 在我的 Rails 应用程序中,负责执行 3rd 方 API 调用的类在哪里?

android - 组织大型 Android 项目的技巧?

c++ - 使用条件变量同步三个线程

c++ - 在 C++ 中使用静态常量成员初始化另一个静态常量

c++ - 编写虚拟网络摄像头?

java - 从 Java 过渡到 C 代码组织

html - 将一个大的 html 文件分成三个较小的 html 文件的最佳方法是什么?

angularjs - 使用 Angular UI Router 在另一个文件中定义 onEnter 和 onExit 回调