gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:19:17 24 4
gpt4 key购买 nike

我正在创建一堆函数,它们都有效地做同样的事情:

long Foo::check(long retValue, unsigned toCheck, const std::set<unsigned>& s)
{
auto it = s.find(toCheck);
return (it == s.end()) ? -retValue : retValue;
}

其中 Foo 是一个类。到目前为止都相当简单。现在,我实际上想在此基础上创建很多变体,但绑定(bind)到不同的集合。然后我想将它们存储在 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);
}

我遇到的问题是试图定义 map 的类型。我以为会是:

std::map<unsigned, boost::function<long (long, unsigned)> > someMap;

但是用 MSVC 9.0 编译它给出:error C2582: 'operator =' function is unavailable in 'boost::function<Signature>' .

map 的第二个模板参数到底应该是什么?

最佳答案

使用 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 的问题。

关于c++ - 在 std::map 中存储 boost::bind 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com