【发布时间】:2012-03-29 01:13:00
【问题描述】:
我正在创建一堆函数,它们都有效地做同样的事情:
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>'。
map 的第二个模板参数究竟应该是什么?
【问题讨论】:
-
您是否尝试将 set 参数(以绑定)包装在 boost::ref 或其他任何名称中?引用不可分配。
-
@Cheersandhth.-Alf 尝试用 boost::cref(currentSet) 包装它,但这给出了完全相同的错误。如果我通过非常量传递它,则相同,如果我通过非常量值传递它,则相同...
-
哦,该死。那么请尝试在最小的程序中重现问题,并发布(完整代码)。
-
@Cheersandhth.-Alf 谢谢。你间接帮助我解决了这个问题,因为通过创建一个最小的程序,我意识到我没有包含正确的头文件。
标签: c++ boost map boost-bind boost-function