这编译并且似乎没问题。 Resourceholder.hpp包含在其他地方。
但是,在 resourceholder.inl 合成报告(在第二行)中,“变量的类型无效”。
有没有办法让合成器理解这种实现?我的意思是特别是从实现中分离出头部的模板类。
resourceholder.hpp
#pragma once
#include<map>
#include<cassert>
#include<memory>
#include<SFML/Graphics.hpp>
#include "resources.h"
template <typename Resource, typename Identifier>
class ResourceHolder
{
private:
std::map<Identifier, std::unique_ptr<Resource>> mResourceMap;
public:
void load(Identifier id, const std::string& filename);
};
#include "resourceholder.inl";
resourceholder.inl
template <typename Resource, typename Identifier>
void ResourceHolder<Resource, Identifier>::load(Identifier id, const std::string& filename)
{
std::unique_ptr<Resource> resource(new Resource());
if (!resource->loadFromFile(filename))
throw std::runtime_error("ResourceHolder::load - Failed to load " + filename);
auto inserted = mResourceMap.insert(std::make_pair(id, std::move(resource)));
assert(inserted.second);
}