我正在编写一个游戏引擎,我试图让它的所有功能都隐藏起来,而且大部分都是无规则的,所以当程序员编写游戏代码时,他们不会为某些事情如何或为什么需要那样或那样而烦恼,并且我试图坚持将其完全保留为 C++ 语言。
因此,例如,我不希望他们:
//Going to create a new object on screen
Object* newObject = gameEngine.gameModels.NewObject(); //I don't want this
相反,我希望他们能够做到这一点:
//Going to create a new object on screen
Object* newObject = new Object();
newObject->Load("objectName"); //Done!
但是为了使它工作,我需要保留我的资源加载器的地址,以便我可以调用正确的 Load 函数并进行实际加载,这就是我正在做的事情:
class BaseModel
{
friend GameEngine;
private:
static ResourceModule* moduleAddress;
};
class Model : public BaseModel
{
public:
void Load(char* assetName)
{
//use moduleAddress as needed
};
};
class GameEngine
{
public:
void Initialize()
{
myBaseModel.moduleAddress = &myResourceModule;
}
private:
ResourceModule myResourceModule;
BaseModel myBaseModel;
};
但是我在“static ResourceModule* resourceModuleAddress”行中遇到了一个未解决的外部错误,并且我无法让“friend”关键字工作(它还说该变量是私有的,无法访问)。
关于如何完成我正在尝试做的事情,或者我怎样才能让这段代码正常工作的任何建议?