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

好吧,似乎这个问题的答案是std::select2nd(...)函数在 VS2008 中通过函数库得到支持,但在 VS2010 中已被弃用。以下是来自 VS2008 的代码,如果需要,可以在将代码移植到 VS2010 时重新实现此功能:

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 回答