Use forwarding reference when passing function objects

So instead of passing every function objects by value (a copy is made), now function objects
will be handled properly by reference (for lvalues) or by value (for rvalues).
This commit is contained in:
Chocobo1 2019-05-16 16:25:53 +08:00
parent 6738cdd715
commit c75500670d
No known key found for this signature in database
GPG key ID: 210D9C873253A68C
2 changed files with 3 additions and 3 deletions

View file

@ -50,7 +50,7 @@ namespace Algorithm
// To be used with associative array types, such as QMap, QHash and it's variants // To be used with associative array types, such as QMap, QHash and it's variants
template <typename T, typename BinaryPredicate template <typename T, typename BinaryPredicate
, typename std::enable_if_t<HasMappedType<T>::value, int> = 0> , typename std::enable_if_t<HasMappedType<T>::value, int> = 0>
void removeIf(T &dict, BinaryPredicate p) void removeIf(T &dict, BinaryPredicate &&p)
{ {
auto it = dict.begin(); auto it = dict.begin();
while (it != dict.end()) while (it != dict.end())
@ -60,7 +60,7 @@ namespace Algorithm
// To be used with set types, such as QSet, std::set // To be used with set types, such as QSet, std::set
template <typename T, typename UnaryPredicate template <typename T, typename UnaryPredicate
, typename std::enable_if_t<!HasMappedType<T>::value, int> = 0> , typename std::enable_if_t<!HasMappedType<T>::value, int> = 0>
void removeIf(T &set, UnaryPredicate p) void removeIf(T &set, UnaryPredicate &&p)
{ {
auto it = set.begin(); auto it = set.begin();
while (it != set.end()) while (it != set.end())

View file

@ -50,7 +50,7 @@ public:
// T proxyFunc(const T &a); // T proxyFunc(const T &a);
template <typename ProxyFunc> template <typename ProxyFunc>
explicit CachedSettingValue(const char *keyName, const T &defaultValue explicit CachedSettingValue(const char *keyName, const T &defaultValue
, ProxyFunc proxyFunc) , ProxyFunc &&proxyFunc)
: m_keyName(QLatin1String(keyName)) : m_keyName(QLatin1String(keyName))
, m_value(proxyFunc(loadValue(defaultValue))) , m_value(proxyFunc(loadValue(defaultValue)))
{ {