ich eine Reihe von Funktionen zu schaffen, die alle effektiv das gleiche tun:Speichern von boost :: bind-Funktionen in einem std :: map
long Foo::check(long retValue, unsigned toCheck, const std::set<unsigned>& s)
{
auto it = s.find(toCheck);
return (it == s.end()) ? -retValue : retValue;
}
wo Foo eine Klasse ist. Alles ziemlich einfach. Nun möchte ich effektiv viele Varianten dazu erstellen, aber an verschiedene Sets gebunden. Ich möchte diese dann in einer std :: map speichern. Also, mit boost :: bind und boost :: Funktion, so etwas wie:
void Foo::addToMap(unsigned option, const std::set<unsigned>& currentSet)
{
someMap[option] = boost::bind(&Foo::check, this, _1, _2, currentSet);
}
Das Problem Ich habe versucht, den Typ der Karte zu definieren. Ich dachte, es wäre:
std::map<unsigned, boost::function<long (long, unsigned)> > someMap;
Aber Kompilieren diese mit MSVC 9.0 gibt: error C2582: 'operator =' function is unavailable in 'boost::function<Signature>'
.
Was genau sollte das zweite Vorlageargument sein?
haben Sie versucht, die Menge Argument (binden) in boost :: ref einzuwickeln oder wie auch immer es heißt? Referenzen sind nicht zuweisbar. –
@ Cheersandthth.-Alf Versucht, es mit boost :: cref (currentSet) zu umhüllen, aber das gibt genau den gleichen Fehler. Dasselbe, wenn ich es mit nicht-const übergebe, dasselbe, wenn ich es durch nicht-konstanten Wert überlasse ... – Yuushi
oh, dang. dann versuchen Sie bitte, das Problem in einem minimalen Programm zu reproduzieren, und posten Sie das (vollständiger Code). –