私は、すべてが効果的に同じことを行う一連の関数を作成しています。
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番目のテンプレート引数は正確に何である必要がありますか?