我正在尝试创建一个静态类来存储和检索诸如声音缓冲区和纹理之类的资产。在这两种情况下,实现方式都是相同的,因此我创建了一个模板化静态类,并尝试专门化它们来存储和检索相应类型的对象。这是我的主意:
template<typename Asset>
class AssetHandler
{
public:
static const Asset& retrieve_asset(const std::string& asset_file_path)
{
//retrieve the asset from m_assets, or load it in...
}
private:
static std::unordered_map<std::string, Asset> m_assets;
};
using ImageHandler = AssetHandler<Image>;
using SoundHandler = AssetHandler<Sound>;
尝试进行诸如ImageHandler::retrieve_asset("image.png")
之类的调用会导致链接器错误,抱怨未定义对AssetHandler{Image}::m_assets
的引用。我曾考虑过只在这里使用继承,但这真的有必要吗?我怎样才能得到我已经要工作的东西?
答案 0 :(得分:0)
在课程之后添加:
template<typename Asset>
std::unordered_map<std::string, Asset> AssetHandler<Asset>::m_assets;