在用Editor加入程式码的时候,会发现上面有Public跟Private二个目录选项,见上图。到底它们的用途是什么?对于熟悉C++的人可能已经猜到原因:为了让Module「介面」跟「实作」的部份有着更明确的区分,我们将所有的.h档都放在Public;.cpp都放在Private。──大部份的情况是可以适用这个规则。只是这个目录架构并不是绝对,我们当然可以在Private中放.h档或在Public中放.cpp,甚至创立自己的目录结构,这在编译程式上并不会有任何的问题。
只是并不是所有的档案都适合放在Public中,要知道,UE4是用Module的概念来组成各个系统的功能。为了Module的维护性与使用端的简便,我们必须要想办法将实作的细节从使用端隐藏起来。
将档案放在Public中所代表的,就是任何人都能够随意的去include这个类别并使用里面的方法。这所造成的结果,会让我们没办法轻易的修改程式,例如更改类别中某个方法的名字。随意修改名子的后果,会造成继承该类别的物件无法编译,又若是所依赖的专案使用大量的Blueprint继承该类别,可想而知这些档案就会全部损坏而无法回复。
其实这边所提的就只是物件导向中『封装』的概念,只是这里从是档案目录结构的面向来思考。要怎么设计Module里面的目录组成方式,就端看这个Module的目的与设计者的巧思。理论上放在Public目录下的类别必须要具有稳定性,不管是类别的名字还是所开放方法的参数。
当然,若是我们所实作的是末端的Game Module,没有其他的Module参照到我们的话,不管怎么组织目录都不会有太大的影响。
另外我们在引擎中还会看到许多Module建立了一个叫Classes的资料夹,如Figure 28。
Figure 28 Engine Module定义了Classes、Private、跟Public三个目录结构。
Public跟Private我们可以理解用途,但为什么多了一个Classes?根据官方的回答,在以前所有的UObject都只能放在Classes这个目录下面。现在当然没有这个限制,为了历史的兼容,这个目录也跟Public一样自动被设定进include搜寻路径之中。
转自:http://dorgon.horizon-studio.net/archives/1152