c++ - 在 C++ 中使用命名空间代替静态类?

标签 c++

将命名空间用作静态类是好的还是好的做法?例如:

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/

相关文章:

c++ - 在 sscanf() 之后调用 free() 时检测到堆损坏

c++ - 关于优化的数学函数、范围和区间

c++ - 我可以知道为什么这段代码没有给出任何输出吗?

c++ - 从函数调用函数时出现 "identifier not found"错误

java - android中是否有用于ms office word(.doc/.docx)到(image/html/xml/pdf)转换的Api

c++ - 程序没有调用正确的重载运算符

c++ - 调用 C# COM 对象后从 C++ 中的 HRESULT 检索错误消息

c++ - 实时应用的OpenCV fastNlMeansDenoising的替代方法?

c++ - 为什么for循环之间的差异很大

c++ - 即使使用FILE_FLAG_DELETE_ON_CLOSE属性创建的文件也保留在磁盘上