Ich habe das folgende Stück Code:Warum kann nicht clang ++ den Typ einer Karte von Lambdas ableiten?
enum RelationalOperator { LT, LTE, EQ, GTE, GT };
std::map<RelationalOperator, bool (*)(const Point&, const Point&)> ops = {
{ GTE, [](const Point& a, const Point& b) { return a >= b; } },
{ LTE, [](const Point& a, const Point& b) { return a <= b; } },
{ EQ, [](const Point& a, const Point& b) { return a == b; } },
{ GT, [](const Point& a, const Point& b) { return a > b; } },
{ LT, [](const Point& a, const Point& b) { return a < b; } },
};
Dieser Code innerhalb einer Vorlage und Point
ist ein Template-Parameter.
Ich versuchte, den Typ der Variablen ops
mit auto
aber Clang ++ sagt zu ersetzen:
src/utils.hpp:47:10: error: cannot deduce actual type for variable 'ops' with type 'auto' from initializer list
Warum das so ist? Ich dachte, dass das Schlüsselwort auto
für diese Art von Situationen war, wo der Typ lang und ziemlich offensichtlich ist.
Es ist nicht * das * offensichtlich, dass Sie eine 'map' und keine' multimap' oder ein Array von Strukturen wollen. –
Bitte geben Sie einen [mcve] (http://stackoverflow.com/help/mcve) für den eigentlichen Code ein, der ein Problem verursacht. –
@BoPersson Mein Fehler, ich habe nicht berücksichtigt, dass andere Objekte dieselbe Initialisiererliste haben können! – rubik