Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
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: 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.
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: GetCsvLine
Next Topic: The right container
Goto Forum:
  


Current Time: Fri Apr 26 01:31:00 CEST 2024

Total time taken to generate the page: 0.04351 seconds