Это компилируется и, кажется, все в порядке. Resourceholder.hpp включен в другом месте.
Однако в resourceholder.inl в синтетических отчетах (во второй строке), что «переменная имеет неполный тип void».
Есть ли способ заставить синтетику понять этот вид реализации? Я имею в виду, в частности, шаблоны классов, которые отделили заголовок от реализации.
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);
}
Задача ещё не решена.
Других решений пока нет …