3

私は、すべてが効果的に同じことを行う一連の関数を作成しています。

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>'ます。

マップする2番目のテンプレート引数は正確に何である必要がありますか?

4

2 に答える 2

0

Boost1.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で何かです。

于 2012-03-29T01:37:25.810 に答える
0

ああ、私はそれを解決しました。間違ったヘッダーファイルをインクルードしていました。それ以外の:

#include <boost/function.hpp>

私はboost/functionフォルダーから次のようなものを含めていました:

#include <boost/function/function_fwd.hpp>

于 2012-03-29T01:58:52.837 に答える