Ich habe die folgende Funktion, die ein std::vector
von Iteratoren in einer anderen Behälter erzeugt:Was würde die Syntax in decltype (x) zu setzen, um den Rückgabetyp in dieser Situation zu spezifizieren
template <typename T,
template <typename, typename = std::allocator<T>> class Con>
std::vector<typename Con<T>::iterator> make_itervec(Con<T>& v)
{
std::vector<typename Con<T>::iterator> itervec;
for (auto i = v.begin(); i != v.end(); ++i)
{
itervec.push_back(i);
}
return itervec;
}
Was ich tun mag, das ist:
template <typename T,
template <typename, typename = std::allocator<T>> class Con>
auto make_itervec(Con<T>& v) -> decltype(x) // This line
{
std::vector<typename Con<T>::iterator> itervec;
for (auto i = v.begin(); i != v.end(); ++i)
{
itervec.push_back(i);
}
return itervec;
}
Was kann ich für x
gestellt dies funktioniert?
versucht, aber gescheiterte Versuche:
decltype(std::vector<typename Con<T>::iterator>)
decltype(std::vector<decltype(v)::iterator>)
(Auch ich bin kein Experte auf diesem, so dass alle anderen Vorschläge, Kommentare sind willkommen Dank!).
Danke, du hast mich in die richtige Richtung gezeigt. Die Verwendung von 'std :: vector' funktionierte jedoch nicht (Kompilierfehler), aber 'std :: vector :: iterator>' tat (mit gcc 4.7.0) . –
@ildjarn: Nein, der gleiche Fehler: 'erwartete einen Typ, bekam declltype (v) :: iterator'. –
@ildjarn: Ich habe 'std :: vector itervec = make_itervec (v);' auch in meinem Code verwendet, was gut funktioniert, verstehe also definitiv nicht, warum es nicht funktioniert. –