2017-11-21 6 views
1

Ich habe folgenden Vektor:Legen unique_ptr in Vektor als Paar

std::vector< std::pair< std::unique_ptr<CEdit>, CRect >> m_editCtrls; 

Ich versuche, hier einige Daten einfügen:

std::unique_ptr<CEdit> edit = std::make_unique<CEdit>(); 
CRect rectEdit; 
//Init edit.... 
//1 - This doesn't work 
std::pair< std::unique_ptr<CEdit>, CRect > pair = std::make_pair<std::unique_ptr<CEdit>, CRect>(std::move(edit), rectEdit); 
//2 - This also 
m_editCtrls.insert(std::make_pair(std::move(edit), rectEdit)); 

Im ersten Fall ich Fehler bekommen - no instance of function template, in zweite - no instance of overloaded function.

Welches ist der richtige Weg, um diesen Zeiger in den Vektor einzufügen?

Danke für Hilfe.

+1

Unmöglich zu sagen, ohne die Definition von 'CRect' zu kennen. –

+1

funktioniert 'insert' ohne einen 'iterator', der auf den Ort der Einfügung zeigt? – PYA

+0

'Crect' und' CEdit' sind Standardsteuerelemente MFC-Klassen. – drewpol

Antwort

2

Keine Vorlagenargumente an std::make_pair übergeben. Lass sie einfach ableiten. Siehe this video(link) von Steven Lavavej. (Dank Passant für die Suche nach dem Link)

std::pair<std::unique_ptr<CEdit>, CRect> pair = std::make_pair(std::move(edit), rectEdit); 

std::vector hat keine Funktion insert genannt, die nur ein Argument. Sie müssen einen Iterator für eine Position übergeben. Vielleicht haben Sie nach push_back gesucht?

m_editCtrls.push_back(std::make_pair(std::move(edit), rectEdit)); 

Oder noch besser, emplace_back.

m_editCtrls.emplace_back(std::move(edit), rectEdit); 
Verwandte Themen