一个仅包含静态方法的类比命名空间更可取吗?

7
我受到了这个问题下的评论的启发。
我认为仅有静态函数的类并不比只有函数的命名空间更好的设计,没有任何理由支持这种观点。欢迎提供这两种方法的优缺点列表。最好能够提供一些实际的例子!

1
一个只有静态成员函数的类对于Java程序员来说应该很熟悉,这会鼓励他们将C++代码写得像Java一样。 - Pete Becker
在C++中,使用命名空间的方式不是首选吗? - Adri C.S.
1
@PeteBecker那是一個贊成還是反對的論點呢?;) - Daniel Frey
1
@DanielFrey 只有当你真的非常喜欢看到 new 的时候,它才是一个专业术语。 - juanchopanza
@juanchopanza 在这里你是用 new 做什么的? - GuLearn
显示剩余3条评论
2个回答

11

一个非风格差异是您可以使用类作为模板参数,但无法使用命名空间。有时会将其用于策略类,例如std::char_traits

除此之外,我建议使用带有普通函数的命名空间。


1
加入访问修饰符作为区别,也许可以吗? - Drew Dormann
1
@Drew 为什么?在只有静态方法的类中,根据定义,没有什么需要封装的。 - R. Martinho Fernandes
1
公共静态方法是通过私有方法实现的,不应直接访问。 - Drew Dormann
@DrewDormann 在命名空间方法中,您可以在.cpp文件中定义私有静态方法而无需在.h文件中声明它们。 - GuLearn
在(很可能的)情况下,如果任何函数只需要在一个翻译单元中使用,那么是的。 - Drew Dormann

3

带有静态方法的类

  • 你可以在一个类中嵌套另一个类,但你不能在类内部创建命名空间(因为这可能没有任何意义)。
  • 它们可以与非常古老的编译器一起使用。

命名空间

- 你可以创建命名空间别名

namespace io = boost::iostreams; 好吧,你也可以用typedef给类取别名,所以这是无关紧要的。

  • 你可以将符号导入到另一个命名空间中。

    namespace mystuff { using namespace boost; }

  • 你可以导入选定的符号。

    using std::string;

  • 它们可以跨越多个文件(非常重要的优点)

  • 内联命名空间(C++11)

总之:在C++中,命名空间是最好的选择。


实际上,类内部的命名空间非常有意义。 - einpoklum
解释“它们可以跨越多个文件”为什么是一个重要的优势会很好。 - Mert Mertce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接