好的,因此在大多数情况下,重写生产代码的API首先是一个坏主意。需要发生两件事。
第一,您实际上需要让您的团队决定对此文件的当前生产版本进行代码冻结。
第二,您需要使用此生产版本并创建一个分支,该分支使用预处理指令来管理构建,以拆分大文件。使用JUST预处理程序指令(#ifdefs,#includes,#endifs)拆分编译比重新编码API容易。对于您的SLA和持续支持而言,这绝对容易。
在这里,您可以简单地切出与类中特定子系统相关的函数,并将它们放在文件mainloop_foostuff.cpp中,并将其包含在mainloop.cpp中的正确位置。
要么
一种更耗时但健壮的方法是设计一种内部依赖项结构,它在事物如何包含方面具有双重间接性。这将使您可以拆分事物,并且仍然可以照顾到相互依赖性。请注意,此方法需要位置编码,因此应结合适当的注释。
这种方法将包括根据要编译的变体使用的组件。
基本结构是您的mainclass.cpp在语句块之后将包含一个名为MainClassComponents.cpp的新文件,如下所示:
#if VARIANT == 1
# define Uses_Component_1
# define Uses_Component_2
#elif VARIANT == 2
# define Uses_Component_1
# define Uses_Component_3
# define Uses_Component_6
...
#endif
#include "MainClassComponents.cpp"
MainClassComponents.cpp文件的主要结构将在那里计算出子组件内的依赖关系,如下所示:
#ifndef _MainClassComponents_cpp
#define _MainClassComponents_cpp
/* dependencies declarations */
#if defined(Activate_Component_1)
#define _REQUIRES_COMPONENT_1
#define _REQUIRES_COMPONENT_3 /* you also need component 3 for component 1 */
#endif
#if defined(Activate_Component_2)
#define _REQUIRES_COMPONENT_2
#define _REQUIRES_COMPONENT_15 /* you also need component 15 for this component */
#endif
/* later on in the header */
#ifdef _REQUIRES_COMPONENT_1
#include "component_1.cpp"
#endif
#ifdef _REQUIRES_COMPONENT_2
#include "component_2.cpp"
#endif
#ifdef _REQUIRES_COMPONENT_3
#include "component_3.cpp"
#endif
#endif /* _MainClassComponents_h */
现在,为每个组件创建一个component_xx.cpp文件。
当然,我使用数字,但是您应该根据代码使用更合乎逻辑的东西。
使用预处理程序使您可以拆分内容,而不必担心API更改(生产过程中的噩梦)。
生产完成后,您就可以进行重新设计了。