14 #ifndef GK_RESOURCEHANDLER_HPP_ 15 #define GK_RESOURCEHANDLER_HPP_ 28 template<
typename T,
typename... Args>
29 T &
add(
const std::string &name, Args &&...args) {
31 throw EXCEPTION(
"A resource of type",
typeid(T).name(),
"already exists with name:", name);
34 m_resources.emplace(name, std::make_shared<T>(std::forward<Args>(args)...));
39 bool has(
const std::string &name) {
44 T &
get(
const std::string &name) {
47 throw EXCEPTION(
"Unable to find resource with name:", name);
50 return *std::static_pointer_cast<T>(it->second);
53 template<
typename ResourceLoader>
54 static auto loadConfigFile(
const char *xmlFilename) ->
typename std::enable_if<std::is_base_of<IResourceLoader, ResourceLoader>::value>::type {
55 ResourceLoader loader;
71 #endif // GK_RESOURCEHANDLER_HPP_
static ResourceHandler & getInstance()
T & add(const std::string &name, Args &&...args)
std::map< std::string, std::shared_ptr< void > > m_resources
static auto loadConfigFile(const char *xmlFilename) -> typename std::enable_if< std::is_base_of< IResourceLoader, ResourceLoader >::value >::type
#define EXCEPTION(args...)
static ResourceHandler * instance
bool has(const std::string &name)
static void setInstance(ResourceHandler &handler)