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
template <typename T, typename BinaryPredicate
, 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();
while (it != dict.end())
@ -60,7 +60,7 @@ namespace Algorithm
// To be used with set types, such as QSet, std::set
template <typename T, typename UnaryPredicate
, 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();
while (it != set.end())

View file

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