gpt4 book ai didi

c++ - 如何在 C++ 中创建静态全局类? (或者我应该以不同的方式这样做吗?)

转载 作者:行者123 更新时间:2023-11-28 06:34:35 25 4
gpt4 key购买 nike

我想要的是一个包含对象和变量的类,任何其他类都可以访问这些对象和变量,而无需创建该类的对象或从创建它的类获取对该对象的引用。我知道在 Java 中 a 可以只创建一个静态类来执行此操作,但 C++ 中似乎不存在静态类。我怎样才能做到这一点?

让我进一步说明我在寻找什么。
假设我有一个名为“暴民”的类(class),它在更新时会寻找玩家并向他移动。我可以通过在生物的更新函数中放置对玩家的引用来做到这一点,或者更好的是只在生物类中创建一个指针,该指针在初始化时分配给玩家的引用。然而,我真正想要的是能够包含一个像“Global.h”这样的标题并将播放器放在那里。然后当生物或程序中的任何其他对象想要从玩家那里获取一些数据时,它可以使用类似 Global.player.GetPos() 的东西

或者也许这是我现在应该忘记的糟糕做法。在这种情况下,请告诉我一个更好的方法来完成这整件事。谢谢。

最佳答案

你可以使用单例模式(你可以在任何地方找到它们,就像 Neil Kirk 在他上面的评论中提到的那样),或者,如果你不需要面向对象的机制(比如继承或多态),我个人成长习惯于只使用简单的函数而不是类。

Mob.hpp

#ifndef MOB_HPP
#define MOB_HPP

namespace Mob {

// "public" functions and variables
extern int someVariable;
extern void moveTowards(Player* player);
extern void retreat(void);

}

#endif

Mob.cpp

#include "Mob.hpp"

// "private" functions and variables
static long _lastUpdate;
static void seekOut(Player* player) {
//...
}

// "public" function implementation and variables
namespace Mob {
int someVariable = 0;

void moveTowards(Player* player) {
//...
}

void retreat(void) {
//...
}
}

用法

#include "mob.hpp"

int var = Mob::someVariable;
Mob::moveTowards(player);

header 基本上定义了您通常在静态类中拥有的所有公共(public)方法。它们被标记为 extern 以便它们具有外部链接并且可以在其他编译单元中使用。

在 .cpp 文件中有一些额外的东西被标记为 static。当您将全局函数或变量声明为 static 时,它们具有内部链接并且仅在定义它们的单元中可见。所以从某种意义上说,它们是私有(private)的

有些人认为这种方法有点落后,但老实说,在处理单例时不需要以某种方式实际将它们用作类,或者获取指向单例实例的指针,然后功能更简单。但有一个缺点:如果您希望暴民不再是单例,而是一个可实例化的对象,您必须稍后再编写一个类。

关于c++ - 如何在 C++ 中创建静态全局类? (或者我应该以不同的方式这样做吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com