C ++静态类

时间:2011-10-01 19:32:02

标签: c++ static c++11

我有一堆函数要放在单独的命名空间或类中。在这两个中,哪个更好?如果是后者,我应该怎么做呢?我的意思是,我没有任何实例成员,所以我应该将构造函数指定为私有吗?或删除它?

无论哪种方式,它都会像这样给你一个想法:

myproject::foo::f()

2 个答案:

答案 0 :(得分:11)

C ++命名空间和类都可以包含函数和其他类型,但行为中存在一些关键差异。你必须决定哪种方法最适合你的特定环境。

  • 可以模板化类,命名空间不能。这提供了一种将一组模板参数传递给整组函数和其他类型的方法。结合typedef,这可能非常强大。

  • 您可以使用using namespace xyz;将整组命名空间成员带入任何范围。可以继承类以使它们进入范围(如果没有实例成员则没有太大影响,由于空基础优化,但是静态成员可以在没有限定的情况下使用),但这仅适用于其他类。自由函数必须明确限定对该类成员的所有访问权限。

  • 命名空间参与依赖于参数的查找,父类的成员不参与。

如果你想使用继承类的技巧来提供模板参数并获得对其静态成员的非限定访问权限,那么你应该将构造函数和析构函数保留为默认值和平凡值,而不是删除或使它们不可访问。在C ++ 11中,您可以将构造函数标记为protected和defaulta。

答案 1 :(得分:1)

如果你使用这个类,最好声明默认构造函数,复制构造函数,赋值运算符和析构函数private / unmplemented(加上C ++ 11可能还有一些)。如果你不这样做,你将拥有一个可用于制作无用物品的类。如果您使用命名空间,则不必执行任何操作。

为对象创建类。使用它们作为静态函数的容器,没有成员数据,滥用比使用更多。