这应该是命名空间还是类?

时间:2011-10-23 12:26:26

标签: c++ coding-style

如果有一组没有相互作用的函数,则将它们放在命名空间中。 (例如,math命名空间。)

当你有一些公共属性和可选的一组作用于这些属性的函数时,它应该成为一个类。

但是当你有一组相关的功能但没有公共属性时呢?一个例子是事件管理员:您可能只有subscribe()post()dispatch(),并且没有公开属性;但是你确实有隐藏的属性,比如订阅者列表和三个函数所依赖的事件队列。这应该是一个类还是命名空间?

4 个答案:

答案 0 :(得分:8)

任何时候你有行为和状态它应该是一个类,即使该状态不公开。这样做的一个实际原因是它可以更容易地对与相关模块交互的其他模块进行单元测试。

答案 1 :(得分:2)

一堂课。你有一个州,虽然是内部的,所以你可能想要创建两个事件管理器(两个队列)。

答案 2 :(得分:2)

这绝对应该是阶级,因为它具有内部状态。如果您需要多个实例,该怎么办?在那种情况下,命名空间无法帮助你,而且类可以。

答案 3 :(得分:2)

如果你想创建一个具有生命周期的事物的一个或多个实例,那么它应该是一个类。

事件管理器听起来像你想要创建,使用然后销毁的东西。所以,它应该是一个类。

名称空间仅用于帮助处理非常大的程序。在大型程序中,您可能有多个开发团队,每个团队都编写代码。每个团队可能无法确保没有其他人使用其他人使用与其他人相同的功能或类别。或者,事物的名称可能与可能想要使用的第三方库发生冲突。命名空间有助于避免这些问题。如果您没有处理大型项目,那么您可能不需要为自己的代码使用命名空间,除非您觉得需要将代码组织到几个命名空间中以保持其整洁。使用不必要的小命名空间可能会使代码难以使用。关于代码是否应该在这个命名空间或者那个代码中,没有太多的意义,最好专注于确保代码实际工作。