[C++] Lambda-Ausdrücke als Template-Parameter
Verfasst: 02.04.2012, 17:16
Hallo erneut,
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:
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:
... 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?
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: 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;
Code: Alles auswählen
std::unordered_set<Typ, decltype( meinHäsch), decltype( meinVergleich)> pfft;
Gibt es dafür eine elegante Standardlösung?