Как говорили другие, вам следует использовать пространство имен. Если вы хотите остаться с вашим классом, создайте класс, который имеет приватный конструктор, и наследуйте его, чтобы сделать ваше намерение очевидным:
class NonConstructible {
NonConstructible();
};
class SuperUtils: NonConstructible {
static void foo();
// ...
static std::vector<int> globalIDs;
// ...
};
Хорошо, теперь давайте посмотрим на пространство имен, которое является единственным и единственным способом сделать это:
namespace SuperUtils {
void foo() {
// ....
}
std::vector<int> globalIDs;
};
Вы можете вызвать это, используя SuperUtils::foo();
в обоих случаях, но пространство имен имеет то преимущество, что в области вы можете использовать декларацию и директиву пространства имен, чтобы привести определенных или всех членов в текущую область, чтобы вы могли ссылаться на них без использования SuperUtils::
:
void superFunction() {
using namespace SuperUtils;
foo();
}
Хотя в целом этого следует избегать, это может быть полезно, когда метод использует исключительно много материала из SuperUtils, что затем может улучшить читаемость кода.