U++ framework
Do not panic. Ask here before giving up.

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 Go to previous message
busiek is currently offline  busiek
Messages: 71
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.
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: GetCsvLine
Next Topic: The right container
Goto Forum:
  


Current Time: Sun May 24 01:51:27 GMT+2 2026

Total time taken to generate the page: 0.00434 seconds