mi aveva intenzione di scrivere un modello di memorizzazione in C++ e si è conclusa con il seguente approccioLambda cattura da parte delle forze di valore tutte ambito oggetto da 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;
}
Stranamente, il mio compilatore VS 2012, ha rifiutato di compilare con il seguente errore
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)
Mi sembra che il compilatore catturi deliberatamente tutto in base al valore come oggetto const. Non riesco a trovare alcun riferimento documentato a questo comportamento.
Qualcuno può aiutarmi a capire cosa sta succedendo qui?
Non dovrebbe essere "memo.count (pos)'? Allo stato attuale, per qualsiasi valore diverso da 0, calcoliamo e memorizziamo sempre il valore, anche se esiste già. –
@PhilWright: Sì, vero. In realtà stavo cercando di eseguire il debug del mio codice e durante la pubblicazione ho dimenticato di cambiarlo. Grazie per averlo evidenziato. – Abhijit