Я создаю кучу функций, которые эффективно делают одно и то же:
long Foo::check(long retValue, unsigned toCheck, const std::set<unsigned>& s)
{
auto it = s.find(toCheck);
return (it == s.end()) ? -retValue : retValue;
}
где Foo — класс. Пока все достаточно просто. Теперь я фактически хочу создать множество вариантов этого, но привязанных к разным наборам. Затем я хочу сохранить их в std::map. Итак, используя boost::bind и boost::function, сделайте что-то вроде:
void Foo::addToMap(unsigned option, const std::set<unsigned>& currentSet)
{
someMap[option] = boost::bind(&Foo::check, this, _1, _2, currentSet);
}
Проблема, с которой я сталкиваюсь, - это попытка определить тип карты. Я думал, что это будет:
std::map<unsigned, boost::function<long (long, unsigned)> > someMap;
Но компиляция этого с помощью MSVC 9.0 дает: error C2582: 'operator =' function is unavailable in 'boost::function<Signature>'
.
Каким именно должен быть второй аргумент шаблона для отображения?