Browse Source

std::decay in fact does the thing we need.

Exactly this approach is used in e.g. std::make_optional, as seen on
cppreference.com. Improves 68638969f3.
pull/23/head
Vladimír Vondruš 13 years ago
parent
commit
91dc9f8956
  1. 4
      src/AbstractResourceLoader.h
  2. 6
      src/ResourceManager.h

4
src/AbstractResourceLoader.h

@ -162,7 +162,7 @@ template<class T> class AbstractResourceLoader {
/** @overload */
template<class U> void set(ResourceKey key, U&& data, ResourceDataState state, ResourcePolicy policy) {
set(key, new typename std::remove_cv<typename std::remove_reference<U>::type>::type(std::forward<U>(data)), state, policy);
set(key, new typename std::decay<U>::type(std::forward<U>(data)), state, policy);
}
/**
@ -177,7 +177,7 @@ template<class T> class AbstractResourceLoader {
/** @overload */
template<class U> void set(ResourceKey key, U&& data) {
set(key, new typename std::remove_cv<typename std::remove_reference<U>::type>::type(std::forward<U>(data)));
set(key, new typename std::decay<U>::type(std::forward<U>(data)));
}
/**

6
src/ResourceManager.h

@ -315,7 +315,7 @@ template<class... Types> class ResourceManager: private Implementation::Resource
/** @overload */
template<class U> ResourceManager<Types...>& set(ResourceKey key, U&& data, ResourceDataState state, ResourcePolicy policy) {
return set(key, new typename std::remove_cv<typename std::remove_reference<U>::type>::type(std::forward<U>(data)), state, policy);
return set(key, new typename std::decay<U>::type(std::forward<U>(data)), state, policy);
}
/**
@ -331,7 +331,7 @@ template<class... Types> class ResourceManager: private Implementation::Resource
/** @overload */
template<class U> ResourceManager<Types...>& set(ResourceKey key, U&& data) {
return set(key, new typename std::remove_cv<typename std::remove_reference<U>::type>::type(std::forward<U>(data)));
return set(key, new typename std::decay<U>::type(std::forward<U>(data)));
}
/** @brief Fallback for not found resources */
@ -355,7 +355,7 @@ template<class... Types> class ResourceManager: private Implementation::Resource
/** @overload */
template<class U> ResourceManager<Types...>& setFallback(U&& data) {
return setFallback(new typename std::remove_cv<typename std::remove_reference<U>::type>::type(std::forward<U>(data)));
return setFallback(new typename std::decay<U>::type(std::forward<U>(data)));
}
/**

Loading…
Cancel
Save