当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《扩展现有的类,如命名空间(C++)?》经验,为你挑选了1个好方法。

我正在写第二人称只是因为它很容易,对你而言.

你正在使用一个游戏引擎,并且真的希望特定的引擎类有一个新的方法来做'bla'.但是你宁愿不将你的"游戏"代码传播到"引擎"代码中.

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

所以这在C++语言中可能完全是非法的,但是你首先想到,"也许我可以通过我自己的标题向现有类添加一个新方法,其中包含'父'标题和一些特殊语法.这在工作时是可行的使用命名空间,例如..."

假设你不能在多个标题中声明一个类的方法(并且你很可能不能确定),那么支持"中间件/引擎/库"和"应用程序"之间的清晰划分的其他选项是什么,你奇迹?



1> Tom Barta..:

我唯一的问题是,"你的附加功能是否需要成为会员功能,还是可以成为免费功能?" 如果您想要做的事情可以使用类的现有接口来解决,那么唯一的区别是语法,您应该使用自由函数(如果您认为这是"丑陋的",那么......吮吸它并继续前进, C++不是为monkeypatching设计的).

如果你试图了解该类的内部内容,则可能表明原始类缺乏灵活性(它没有为您提供足够的信息以便从公共接口执行您想要的操作).如果是这种情况,也许原始类可以"完成",并且你又回到了自由功能的基础上.

如果绝对没有一个可以工作,你只需要一个成员函数(例如原始类提供了你想要的受保护成员,而你没有自由修改原始界面)...只有这样才能诉诸于继承和成员函数实现.

有关深入讨论(以及解构std::string'),请查看本周的"大师"类大师文章.


嗯,它有些苛刻(确实是"monkeypatching"),但确实如此.+1.
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有