C ++ 11 — Используя синтаксис с C ++, как вы можете реализовать шаблоны классов без ошибок?

Это компилируется и, кажется, все в порядке. 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);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]