大量使用静态成员变量是一种好习惯吗?
Is it good practice to have heavy use of static member variables?
作为没有任何正式编程培训的人,我想知道我的c++编码方法是否被认为是良好的实践。具体地说,我谈论的是成员都是静态的类的使用。这是我经常使用的模型,当我确定该类只实例化一次时,我希望能够从代码中的任何地方访问该类。然而,它看起来有点奇怪,因为周围有大量的static
关键字,而且我必须在类定义之外显式初始化这些变量。
例如,如果我正在编写一款游戏,可能会有几个类我只实例化一次,并且想要从任何地方访问。这些类别可以是Graphics
(代表要渲染的颜色和形状),World
(代表我的角色所处的世界),User
(代表当前游戏中的人类玩家),Score
(代表当前分数)等等。我通常会将它们创建为"静态"类,因为这样我就可以从代码中的任何地方访问它们。如果它们是"非静态"类,那么我将不得不不断传递指向这些对象的指针。
那么,对于一个足球游戏,我的代码可能看起来像:
// world.h
class World
{
public:
static float pitch_colour;
static float pitch_size;
static float player_colour;
static float player_size;
static int num_players;
static std::vector<Player> players;
static void UpdatePositions();
};
// world.cpp
float World::pitch_colour = 0.9;
float World::pitch_size = 100;
float World::player_colour = 0.3;
float World::player_size = 5;
int World::num_players = 10;
std::vector<Player> World::players = std::vector<Player>(World::num_players);
void World::UpdatePositions()
{
for (int i = 0; i < num_players; i++)
{
players[i].UpdatePosition();
}
}
// main.cpp
int main()
{
while (true)
{
World::UpdatePositions();
Graphics::DrawPitch(World::pitch_size, World::pitch_colour);
for (int i = 0; i < World::num_players; i++)
{
Graphics::DrawPlayer(&World::players[i], World::player_size, World::player_colour);
}
}
}
这种代码运行良好,但我只是想知道是否使用大量的静态类像这样是一个典型的方法,或者是否有更强烈推荐的东西?谢谢! 如果你只是想对全局变量/函数进行分组(就像你在这里实际做的那样),只需将它们放在一个命名空间中。
OTOH,你所做的看起来很像单例模式,在这里你可以找到一些建议和大量的链接/副本:
c++单例设计模式
相关文章:
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 派生类是单例是否是一种好的做法
- 抽象类/接口中的空方法是否被认为是一种好的做法?
- 将"this"从父类方法转换为子类方法是一种好的做法吗?
- 在我的情况下,多重继承是一种好的设计模式吗?
- 在函数中使用布尔"recursiveCall"参数是一种好的做法吗?
- 从 r 值引用限定方法返回 r 值引用是否是一种好的做法?
- 有没有一种好方法可以捕获或避免这种微妙的错误?
- 在 std::thread 创建的线程中调用 pthread_sigmask 是一种好的做法吗?
- 使用shared_ptr获得唯一所有权(有点)——这是一种好的做法吗
- 如果要调用多个成员函数,对象编辑器是否是一种好方法?
- 不为模板化类分离函数声明和定义是一种好的做法吗
- 在每个可能的地方使用指针是否是一种好习惯
- 在销毁 pthread 互斥锁之前锁定它是否是一种好习惯
- 大量使用静态成员变量是一种好习惯吗?
- 重命名和重新包含 std::unique_ptr 是一种好习惯吗?