【发布时间】:2025-12-26 10:15:16
【问题描述】:
想象一个项目的开发时间跨度超过 10 年。有些部分是 C 语言,有些是 C++ 语言,所有代码都使用全局函数和全局变量。该架构本质上是单线程设计的,并以这种方式不断发展。但现在我们考虑使用多核架构。
现在正在评估的一个想法是将代码的一部分重构到一个库中,以便可以创建多个实例,以便它们可以在单独的线程中运行并且不会相互干扰。
目前最受关注的建议是将所有库文件包装到带有宏定义的命名空间中,例如:
namespace VARIANT {
// all the code
}
然后在标题或项目级别定义VARIANT。这将使得在不同的命名空间中有不同的上下文成为可能。卖点是这种方法需要最少的代码更改,并且引入任何回归的风险很低。
但是如果在某些时候我们需要使Variant1 的行为不同于Variant2,事情就会变得棘手,因为没有办法将宏定义的值与预处理器宏中的字符串进行比较。
有没有更优雅的方法来实现这一点?
【问题讨论】:
-
优雅的方法是重构整个东西而不使用全局变量,但你已经知道了;)
-
我不确定命名空间是否“优雅”——您必须将 C 文件转换为 C++ 文件(C 不支持命名空间!)并且您必须重新编译使用它的每个新线程的整个库!
标签: c++ c macros namespaces