我正在开发一个应用程序,当针对某个特定目标进行编译时,将会或不会执行某些特定操作。 从C中获取这种问题的传统方法是在各处添加许多#ifdef指令。但这会导致代码非常糟糕,难以理解且几乎无法维护。 然而,有一种更好的现代C ++方法,即Alexandrescu的Policy Based Design。但它需要完全不同的思维,准备应用程序从头开始意识到策略。使用#ifdefs方法,如果您已经拥有庞大的代码库,那么您实现了一项新功能,并且您突然意识到需要根据某个目标来区分某些内容,即执行某些操作或不执行操作,例如,您可以放弃一个#ifdef指令,无论你想要什么,它都不会破坏你现有的代码,它会做你期望它做的事情。基于策略的设计(PBD)不是这种情况。您必须从头开始设计应用程序才能了解这些策略,然后才能使用它们。
然而,还有另一个问题。假设我已经将应用程序设计为可识别PBD。现在我想有一个编译开关,我的意思是cmake开关,选择这个或那个政策。我不想修改我的例子。主要功能,用策略B而不是策略A来构建程序的其余部分。有没有一种干净的方法来实现这个目标?某种依赖注入C ++?我认为解决方案是两个文件“main.cpp”与main函数一起使用,并根据一些环境变量用于编译。但也许有更好的方法?
另外,我想问一下你使用#ifdefs和PBD解决这些问题的经历。