【发布时间】:2019-03-24 17:22:45
【问题描述】:
我正在尝试创建一个静态类来存储和检索声音缓冲区和纹理等资产。这两种情况的实现方式是相同的,所以我创建了一个模板化的静态类,并尝试将它们专门用于存储和检索各自类型的对象。这是我的想法:
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 的引用。我考虑过在这里只使用继承,但这真的有必要吗?我怎样才能得到我已经必须工作的东西?
【问题讨论】:
标签: c++ class templates static template-specialization