Как я могу специализировать статический шаблонный класс? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь создать статический класс для хранения и извлечения ресурсов, таких как звуковые буферы и текстуры. То, как это реализовано, одинаково для обоих этих случаев, поэтому я создал шаблонный статический класс и попытался специализировать их для хранения и извлечения объектов соответствующих типов. Вот моя идея:

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. Я думал об использовании здесь наследования, но действительно ли это необходимо? Как я могу получить то, что у меня уже есть на работе?

1 Ответ

0 голосов
/ 24 марта 2019

Добавить после урока:

template<typename Asset>
std::unordered_map<std::string, Asset> AssetHandler<Asset>::m_assets;
...