ich beabsichtigte, ein Auswendiglernen Muster in C++ zu schreiben und endete mit folgendem AnsatzLambda Erfassung von Wert alle Kräfte Objekt scoped const
std::function<int(int)> Memoize(std::function<int(int)> fn)
{
std::map<int, int> memo;
std::function<int(int)> helper = [=](int pos)
{
if (memo.count(pos) == 0)
{
memo[pos] = fn(pos);
}
return memo[pos];
};
return helper;
}
Seltsam, mein Compiler VS 2012, weigerte sich mit der folgenden kompilieren Fehler
1>Source1.cpp(24): error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const std::map<_Kty,_Ty>' (or there is no acceptable conversion)
Es scheint mir, dass der Compiler absichtlich alles als const Objekt wert erfasst. Ich kann keinen dokumentierten Hinweis auf dieses Verhalten finden.
Kann mir jemand helfen zu verstehen, was hier möglicherweise passiert?
Sollte es nicht 'memo.count (pos)' sein? Für andere Werte als 0 berechnen und speichern wir den Wert immer, auch wenn er bereits existiert. –
@PhilWright: Ja, stimmt. Eigentlich habe ich versucht, meinen Code zu debuggen und während des Postings vergessen zu ändern. Danke für die Hervorhebung. – Abhijit