2016-05-07 11 views
-1

Ich habe KlasseC++ Herstellung Karte Doppelpaar

template <typename _T, typename _E> 
class CRoute 
{ 
    public: 
    CRoute& Add(const _T & u1 , const _T & u2 , const _E & e); 
    ... 
    private: 
    map < _T, vector<pair<_T,_E>> > graf; 
}; 

hinzufügen Funktion haben elemts zuweisen graf;

ABER! Ich kann den Standardkonstruktor der Typen _T und _E nicht verwenden. Aus diesem Grund kann ich folgendes nicht tun:

template <typename _T, typename _E> 
CRoute<_T,_E>& CRoute<_T,_E>::Add(const _T & u1 , const _T & u2 , const _E & e){  
    graf[u1].emplace_back(u2 , e); 
    return *this; 
} 

Ich kann nur kopieren Konstruktor verwenden. Wie kann ich es machen?

+3

Bitte geben Sie eine [mcve] an. – Barry

+0

Das Schlüssel-Wert-Paar Ihrer 'graph'-Map ist' std :: pair <_T, std :: vector > ', Sie versuchen ein' std :: pair <_T, std :: Paar <_T, _E>> '. – user2296177

Antwort

0

Sie könnten Inspiration von std::map::emplace_back nehmen und Ihre eigenen Add Funktion Arbeit die gleiche Art und Weise haben, wobei Argumente für den Bau von _T und _E Objekte, anstatt bereits konstruierten Instanzen dieser Objekte.

Andernfalls ist Ihre einzige Option, rvalue Referenzen zu nehmen und hoffen, dass Ihre Typen beweglich sind.