Пространства имен и типы классов не способны на одно и то же. Пространства имен в основном используются для группировки типов и функций во избежание конфликтов имен, тогда как типы классов содержат данные и операции, которые работают с этими данными.
Чтобы просто сгруппировать функции и объекты, используя типы классов, вам нужно сделать их статическими:
struct X {
static void f();
};
Без static
вам пришлось бы создавать экземпляры типов классов, чтобы использовать их. Здесь лучше подходит пространство имен:
namespace X {
void f();
}
Другая важная вещь - это using
декларации и директивы:
namespace X {
void f();
void g();
}
void h() {
using X::f;
f(); // f() now visible in current scope
using namespace X;
f(); g(); // both visible
}
С типами классов просто нет механизма, который бы позволял это.
Типы классов дают вам над пространствами имен то, что вы можете иметь несколько экземпляров с различным состоянием - если вам нужно, используйте тип класса.