我正在編寫一個遊戲引擎,我試圖讓它的所有函數都是隱藏的,大部分是無規則的,所以當程序員編寫遊戲代碼時,他們不打擾如何或爲什麼需要這樣或那樣的東西,我試圖堅持把它純粹地作爲C++語言。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!
但對於這個工作,我需要讓我的資源加載器的地址,以便我可以調用適當的負載功能,並進行實際的負載,這是我在做什麼:
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;
};
但是我得到了一個「靜態ResourceModule * resourceModuleAddress」行的無法解析的外部錯誤,我無法獲得「friend」關鍵字的工作(它也表示變量是私有的,無法訪問) 。
有關如何完成我想要做的事情的任何建議,或者我如何才能使此代碼在上面工作?
看起來好像你正在試圖爲C++實現*反射*。搜索這個關鍵字,我相信你會有很多解決方案。 – amit
你有沒有在'BaseModel'中的'friend'聲明之前聲明'GameEngine'? – dyp
錯別字已修復,並且在我將GameEngine聲明添加到它上面之後它就起作用了!謝謝! – Danicco