eine Kleinigkeit, die mir gerade etwas Stirnrunzeln verursacht hat: ich wollte für ein std::unordered_set einen eigenen Hasher und Comparer angeben. Ich dachte, ich könnte da einfach Lambdas für einsetzen, so etwa in der Art:
- Code: Ansicht erweitern :: Alles auswählen
auto meinHäsch = [&](const Typ& t) { return size_t( ...); }
auto meinVergleich = [&](const Typ& t1, const Typ& t2) { return 2b || !2b; }
std::unordered_set<Typ, meinHäsch, meinVergleich> pfft;
Geht nicht, weil... tja, hier hört mein Verständnis auf. Laut Doku kann ich dort einen Ausdruck angeben, der das Konzept () erfüllt. Geht aber nicht, weil es Typen und keine Instanzen sein dürfen. Ich habe es dann wie folgt abgeändert:
- Code: Ansicht erweitern :: Alles auswählen
std::unordered_set<Typ, decltype( meinHäsch), decltype( meinVergleich)> pfft;
... und ich kam mir dabei furchtbar clever vor. Damit ändert sich die Fehlermeldung zu "No default constructor available". Grmpf. Jetzt hab ich den Code doch in Funktoren verpackt und jetzt meckert VS nur noch darüber, dass die Funktoren lokal definiert sind.
Gibt es dafür eine elegante Standardlösung?
