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
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)))
{ {