Как уже отмечалось, использование глобальных переменных, как правило, является плохой инженерной практикой, если, конечно, это абсолютно не нужно (например, для отображения аппаратного обеспечения, но это случается не часто).
Сохранение всего в классе - это то, что вам нужнобудет делать в Java-подобном языке, но в C ++ вам не нужно, и на самом деле использование пространств имен здесь является лучшей альтернативой, если только:
- , потому что люди не будут внезапно создавать экземплярываших объектов: с какой целью?
- , поскольку для пространств имен не генерируется информация о самоанализе (RTTI)
Вот типичная реализация:
// foo.h
#ifndef MYPROJECT_FOO_H_INCLUDED
#define MYPROJECT_FOO_H_INCLUDED
namespace myproject {
void foo();
void foomore();
}
#endif // MYPROJECT_FOO_H_INCLUDED
// foo.cpp
#include "myproject/foo.h"
namespace myproject {
namespace {
typedef XXXX MyHelperType;
void bar(MyHelperType& helper);
} // anonymous
void foo() {
MyHelperType helper = /**/;
bar(helper);
}
void foomore() {
MyHelperType helper = /**/;
bar(helper);
bar(helper);
}
} // myproject
Пространство анонимных имен, аккуратно заправленное в исходном файле, представляет собой расширенный раздел private
: не только клиент не может использовать то, что находится внутри, но он даже не видит его вообще (поскольку он находится в исходном файле) и, следовательно, не зависит от него (который имеет определенные преимущества ABI и времени компиляции!)