C++ 在std::map中存储boost::bind函数

C++ 在std::map中存储boost::bind函数,c++,boost,map,boost-bind,boost-function,C++,Boost,Map,Boost Bind,Boost Function,我正在创建一系列函数,它们都有效地完成了相同的任务: long Foo::check(long retValue, unsigned toCheck, const std::set<unsigned>& s) { auto it = s.find(toCheck); return (it == s.end()) ? -retValue : retValue; } long Foo::check(long retValue,unsigned toCheck,c

我正在创建一系列函数,它们都有效地完成了相同的任务:

long Foo::check(long retValue, unsigned toCheck, const std::set<unsigned>& s)
{
    auto it = s.find(toCheck);
    return (it == s.end()) ? -retValue : retValue;
}
long Foo::check(long retValue,unsigned toCheck,const std::set&s)
{
自动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);
}
void Foo::addToMap(无符号选项,常量std::set¤tSet)
{
someMap[option]=boost::bind(&Foo::check,this,_1,_2,currentSet);
}
我遇到的问题是试图定义地图的类型。我想应该是:

std::map<unsigned, boost::function<long (long, unsigned)> > someMap;
std::map someMap;
但是用MSVC 9.0编译它会出现:
错误C2582:'operator='函数在'boost::function'中不可用。


要映射的第二个模板参数应该是什么

使用boost 1.49和g++4.4.4,我可以做一些非常类似的事情。下面是一段代码片段

typedef boost::function< void (SomeType) > CallbackType;

std::pair<std::string, CallbackType> NameCallbackPair;

也许是MSVC9的问题。

啊,我解决了。我包含了错误的头文件;而不是:

#包括

我在boost/function文件夹中添加了如下内容:


#include

您是否尝试过将set参数(要绑定)封装在boost::ref或任何它的调用中?引用是不可分配的。@Cheersandhth.-Alf试图用boost::cref(currentSet)将其包装起来,但给出了完全相同的错误。如果我通过非常量传递它也是一样的,如果我通过非常量值传递它也是一样的……哦,该死。然后,请尝试在一个最小的程序中重现这个问题,并发布(完整的代码)。@Cheersandhth.-Alf谢谢。您间接地帮助我解决了这个问题,因为通过创建一个最小的程序,我意识到我没有包含正确的头文件。
NameCallbackPair somePair(someString, boost::bind(&SomeClass::someMethod, this, _1));