Ben*_*igt 11
C++名称空间和类都可以包含函数和其他类型,但行为中存在一些关键差异.您必须决定哪种情况最适合您的特定情况.
类可以是模板化的,命名空间也不能.这提供了一种将一组模板参数传递给整组函数和其他类型的方法.结合使用typedef,这可能非常强大.
您可以使用using namespace xyz;将整组命名空间成员带入任何范围.可以继承类以使它们进入范围(如果没有实例成员则没有太大影响,由于空基础优化,但是静态成员可以在没有限定的情况下使用),但这仅适用于其他类.自由函数必须明确限定对类成员的所有访问.
命名空间参与依赖于参数的查找,而父类的成员则不参与.
如果您想使用继承类的技巧来提供模板参数并获得对其静态成员的非限定访问权限,那么您应该将构造函数和析构函数保留为默认值和平凡值,而不是删除或使它们不可访问.在C++ 11中,您可以将构造函数标记为protected和defaulta.