2

ボーランド C++ ビルダー 6 で記述された DLL の古い C++ コードについて助けが必要です。VS2008 または VS2010 で再コンパイルする必要があります。私たちのすべてのテストで、MSVC は borland builder よりも 4 倍以上 (速度に関して) コードを最適化することが示されているため、私たちのソフトウェアには一種のリアルタイム要件があります。私は主にAnsiString、イベント、スレッド、リストのクラスであるstdまたはwin32api関数で多くのVCLコードを書き直したりラップしたりしたので、ほとんどのコードはコンパイルされてうまく動作します...

でも一人ではどうしたらいいのかわからない壁にぶち当たったので、どなたかお力添えをお願いします。

__closureキーワードをシミュレートできるものをどのように実装できるかわかりません。これは borland c++ ビルダー固有のキーワードであり、プログラマーがメンバー関数への汎用ポインターを使用できるようにします。メンバー関数へのポインターは通常の関数ポインターではなく、member_function_pointer=function_pointer-this. したがって、__closure保存する必要がありthisますmember_function_pointer。しかし、これを達成する方法がわかりません。コード内のクラスはお互いを認識していないため、これはどのように可能であり、これは優れたオブジェクト指向プログラミングの原則のすべての原則に違反します。

さびた英語で申し訳ありません:S お時間とご協力ありがとうございます。

4

1 に答える 1

1

std::bindまたはboost:: bindのいずれかでうまくいくはずです。「 std::bindメンバー関数をオブジェクトポインタに」および「boost::bindおよびクラスメンバー関数」の質問も参照してください。また、 boost::functionまたはstd::functionも確認することをお勧めします。

于 2011-02-24T14:37:58.777 に答える