1

大規模な C++ COM プロジェクトを VS2008 から VS2010 に移植しています。次のようなコード行があります。VS2008 プロジェクトでは正常にコンパイルされますが、VS2010 でコンパイルすると参照エラーが発生します。

std::select2nd<std::map<DWORD, ISomethingUseful*>::value_type>());

コンパイルエラーは次のとおりです。

error C2039: 'select2nd' : is not a member of 'std'

これが「非標準」関数であることは知っていますが、このコードを最初に作成した人は誰でも、VS2008 の std 名前空間でそれを見つけました。使用した #include は、VS2010 では正しくないようです。

この関数が VS2010 のどこにあるか知っている人はいますか? 具体的には、それを使用するために今すぐインクルードする必要があるヘッダー ファイルはどれですか?


編集: 今のところこの問題を回避するために、VS2008 VC\include\functional ヘッダー ファイルからコードを取得し、以下の回答で概説するように、コード ベース (ユーティリティ クラス内) に含めました。

他の誰かが提供できる洞察をいただければ幸いです。

4

1 に答える 1

1

さて、この質問に対する答えは、機能ライブラリを介して VS2008 でstd::select2nd(...)関数がサポートされていたが、VS2010 では廃止されたということです。コードを VS2010 に移植するときに、必要に応じてこの関数を再生成するために使用できる VS2008 のコードを次に示します。

template<class Pair> struct select2nd : public std::unary_function<Pair, typename Pair::second_type>
{   
    // functor for unary second of pair selector operator
    const typename Pair::second_type& operator()(const Pair& Left) const
    {   
        // apply second selector operator to pair operand
        return (Left.second);
    }
};
于 2012-08-06T05:24:04.743 に答える