C++ STLでmen_funとbind1st上の古い問題:このコードのために、今すぐいくつかの簡単なコードは、問題を説明します
class Foo {};
struct Bar {
bool foo(const Foo &f) const { return false; }
};
int main() {
Bar bar;
vector<Foo> v;
std::find_if(v.begin(), v.end(), std::bind1st(
std::mem_fun_ref(&Bar::foo), bar));
return 0;
}
は、VS2010のC++コンパイラが文句を言うだろう: エラーC2535を:BOOLのstd :: binder1st < _Fn2> ::演算子()(のconst Fooの&)constは:すでに以前のバージョンのVisual Studioで宣言
で定義された メンバ関数、問題を参照するために参照するために関連している2つの以上のコンパイルエラーが存在することになります。これらの問題はVS2010で発生しましたが、C2535は残っています。
この質問はthis oneに似ています。その投稿が示唆しているように、私はstd :: bindやboostライブラリを代わりに使うことができます。彼らはうまく動作しますが、今のところ、私はこの場合に古いbind1stスタイルを使用することが可能かどうか、あるいはSTLの機能フレームワークに固有のこの問題が多いことを知りたいのですか? ありがとう!
これは当てはまりません。 'mem_fun_ref'は1つの引数を取るメンバ関数のオーバーロードを持っています。戻り値の型は 'const_mem_fun1_ref_t <_Result、_Ty、_Arg>'です。これはbinary_functionのサブタイプです。 VS2010では、ヘッダファイルに定義されています –
weidi
@weidi '[deprecated.member.pointer.adaptors]'のD8.2.2で 'const_mem_fun_ref_t'の定義を見つけることができます。おそらく、MSVCの拡張機能があります。私はMSDN上でそれについてのドキュメントを見つけることができませんでした。 – pmr
[this](http://msdn.microsoft.com/en-us/library/etctxx69(v = vs.100).aspx)はMSDNのドキュメントですか?私はそれを誤解している場合はごめんなさい。私は実際に様々なC++ドキュメントについて多くのことを知らないし、D8.2.2が何を指しているのか分からない。アダプターの廃止予定が記載されているリンクを共有できますか? – weidi