0

我正在阅读“游戏编码完成”这本书,它基本上是关于游戏引擎的概念。关于资源缓存的部分有一些我不太明白的代码。

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++ 经验,所以请赐教。:)

谢谢!

4

3 回答 3

3

该行一个函数声明。它被命名CreateWAVResourceLoader,没有参数,并返回一个shared_ptr<IResourceLoader>.

当你说:

m_ResCache->RegisterLoader(CreateWAVResourceLoader());

那是你打电话的时候。它将函数返回的临时共享指针传递到RegisterLoader.

于 2013-04-06T18:50:22.063 回答
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;
};
于 2013-04-06T18:52:45.567 回答
0
extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();

只是意味着该函数将在另一个文件(extern)中实现并且它将返回shared_ptr。整行只是一个函数声明

shared_ptr<IResourceLoader> CreateWAVResourceLoader()
{
    return shared_ptr<IResourceLoader>(GCC_NEW WaveResourceLoader());
}

只是功能的实现。

于 2013-04-06T18:51:56.603 回答