将命名空间用作静态类是好的还是好的做法?例如:
namespace MyStaticFunctions {
void doSomething();
}
对比:
class MyStaticFunctions {
static void doSomething();
}
最佳答案
C++ 中没有“静态类”之类的东西,所以从 C++ 的角度来看,您不是在“作为静态类”使用它,而是在“作为命名空间”使用它。使用命名空间将函数组合在一起当然是公认的做法。
不过,您希望这些组有多大,这取决于您。 C++ 库为整个公共(public)接口(interface)使用单个命名空间并不罕见。对于习惯于(比如)Java 的人来说,这可能会让他们感到惊讶,因为在 Java 中,类通常用于将较少数量的静态方法组合在一起。由于 C++ 最先出现,您可以说 Java 使用类作为命名空间。
因此,在 C++ 中,您不会看到类似于 java.util.Collections
的类。或 java.lang.Math
,充满静态成员。如果你想要 C++ 中的函数组,请使用命名空间。
异常(exception)(C++ 中不是总是有特殊情况吗?)是特征类型,如 std::numeric_limits<T>
,其中模板参数使类执行命名空间无法执行的操作。你可以定义一个命名空间 numeric_limits
包含函数模板max<T>()
, min<T>()
等等,但它不是那么好。首先,它对事物的分组略有不同,类型 T
出现“在层次结构下层”。其次,它并没有做特征类型所做的所有事情,因为没有“对象模板”之类的东西可以让你定义一个值numeric_limits::digits<T>
。 .
我不太了解 C#,无法评论静态类的实际用途,但 AFAIK 只是一个限制为没有非静态成员的类,因此它类似于那些 Java 类。
关于c++ - 在 C++ 中使用命名空间代替静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361408/