我正在阅读“Game Coding Complete”一书,它基本上是关于游戏引擎的概念。 关于资源缓存的部分有一些我不太了解的代码。
extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();
其中CreateWAVResourceLoader()看起来像
shared_ptr<IResourceLoader> CreateWAVResourceLoader()
{
return shared_ptr<IResourceLoader>(GCC_NEW WaveResourceLoader());
}
然后作者注册了wave资源加载器
m_ResCache->RegisterLoader(CreateWAVResourceLoader());
对我来说,行extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();
有点令人困惑,因为我正在调用返回shared_ptr的函数,但是如何在没有名称的情况下使用该指针呢?我很确定这是我缺乏C ++的经验,所以请赐教。 :)
谢谢!
答案 0 :(得分:3)
该行是一个函数声明。它名为CreateWAVResourceLoader
,没有参数,并返回shared_ptr<IResourceLoader>
。
当你说:
m_ResCache->RegisterLoader(CreateWAVResourceLoader());
那是你打电话的时候。它将从函数返回的临时共享指针传递给RegisterLoader
。
答案 1 :(得分:2)
但是如何在没有名字的情况下使用该指针?
您不是将使用shared_ptr的人,对象m_ResCache
将是。我假设该对象具有处理资源的接口,并在内部跟踪shared_ptrs。
即。它是这样的:
class foo {
public:
RegisterLoader(shared_ptr<IResourceLoader> ptr) { internal_ptr = ptr; }
DoSomethingWithLoader() { /* ... */ }
private:
shared_ptr<IResourceLoader> internal_ptr;
};
答案 2 :(得分:0)
extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();
只是意味着该函数将在另一个文件(extern)中实现,并且它将返回shared_ptr。整行只是一个函数声明和
shared_ptr<IResourceLoader> CreateWAVResourceLoader()
{
return shared_ptr<IResourceLoader>(GCC_NEW WaveResourceLoader());
}
只是该函数的一个实现。