2017-02-16 3 views
0

Wenn ich einen Iterator eines Containers dereferenzieren (z. B. *v.begin()), bekomme ich immer einen Verweis auf den enthaltenen Typ. Und dann kann ich decltype nicht verwenden, um einen anderen Container zu initialisieren.Mit Dekletyp zu initialisieren Container

int main() 
{ 
    vector<int> a; 
    vector<decltype(*a.begin())> b; 
    return 0; 
} 

Wie löse ich das?

+7

Verwenden Sie 'std :: remove_reference'. Schlag es nach. –

+6

'std :: Vektor b;' – Snps

Antwort

3

Wahl 1:

Der einfachste Weg b zu erklären ist decltype(a) als Behältertyp zu verwenden.

decltype(a) b; 

Wahl 2:

Die nächste Stufe der Indirektheit b zu erklären ist decltype(a)::value_type als enthaltenen Typ zu verwenden.

std::vector<decltype(a)::value_type> b; 

Wahl 3:

Die Umwege zu erklären b ist std::remove_reference zu verwenden, um die Referenz aus dem dereferenzierte Iterator zu entfernen.

std::vector<std::remove_reference<decltype(*a.begin())>::type> b; 
Verwandte Themen