Home » U++ Library support » U++ Core » Why there is no Index::Add(T&&)?
Why there is no Index::Add(T&&)? [message #49094] |
Sun, 17 December 2017 05:42 |
busiek
Messages: 64 Registered: February 2011 Location: Poland
|
Member |
|
|
I need to store large objects as keys in Index, thus I prefer to pass ownership of a key to the container. I had to create my own container:
template <class T>
class HeavyIndex : public Index<T>, public MoveableAndDeepCopyOption<HeavyIndex<T>>
{
typedef Index<T> B;
public:
T& Add(T&& x, unsigned _hash)
{
T& t = B::key.Add(pick(x));
B::hash.Add(_hash);
return t;
}
T& Add(T&& x) { return Add(pick(x), B::hashfn(x)); }
int FindAdd(T&& x, unsigned _hash)
{
int i = B::Find(x, _hash);
if(i >= 0) return i;
i = B::key.GetCount();
Add(pick(x), _hash);
return i;
}
int FindAdd(T&& x) { return FindAdd(pick(x), B::hashfn(x)); }
};
However, probably a single version of Add() method can be created using a solution with std::forward similarly as in Fixes to Array::Create & Vector::Create.
|
|
|
Goto Forum:
Current Time: Fri Apr 26 01:31:00 CEST 2024
Total time taken to generate the page: 0.04351 seconds
|