我有以下问题需要解决。在编译时决定构造对象
我有组件A.此组件有一些子组件 - B,C,D。使用cmake我正在构建或不构建B,C,D组件。这取决于当前的平台配置。我的cmake系统正在生成可执行的makefile(对于A组件),用于仅链接那些在给定cmake运行中使用的组件。如果构建组件B,则会将其添加到可执行文件中(如果没有) - 未链接。与其他 - C,D相同。
所有这些B,C,D组件都提供了A组件中使用的接口的一些实现。这个A组件应该管理由B,C,D创建的对象,并在适当的时候使用适当的对象将这些对象保存在某个映射中。
问:
我要实现一些简单的和可靠的机制,将这些对象自动实现A接口,同样因为它现在是带有链接 - 链接只是模块,建成。与这些对象相同 - 我希望只有在编译时才将它们注册到A组件中。
我很难解释它。这个想法很容易 - 在编译时建立这些对象的一些映射。只有已编译的组件才能将其对象传送到此地图。
您可以使用makefile/cmake系统设置的预处理器指令来解决此问题。例如,如果编译组件B并且在编译A时应该包含组件B,则可以使用指令(如#ifdef COMPILED_B)在必要时在B中包含对B的支持。 – 2013-05-08 13:47:36
是的,这是可能的,但我想在源代码中避免#ifdef。我只是想知道其他人是如何以更复杂的方式来做这件事的。 – user2301299 2013-05-08 14:29:12