我正在创建一系列功能,它们都有效地做同样的事情:
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>'
。
映射的第二个模板参数到底应该是什么?
答案 0 :(得分:0)
使用boost 1.49和g ++ 4.4.4,我能够做一些非常相似的事情。这是一段代码片段。
typedef boost::function< void (SomeType) > CallbackType;
std::pair<std::string, CallbackType> NameCallbackPair;
然后我可以为它分配以下内容:
NameCallbackPair somePair(someString, boost::bind(&SomeClass::someMethod, this, _1));
也许它与MSVC9有关。
答案 1 :(得分:0)
啊我解决了。我包含了错误的头文件;而不是:
#include <boost/function.hpp>
我在boost / function文件夹中包含了以下内容:
#include <boost/function/function_fwd.hpp>