Visual Studio 2008->;2010端口:错误C2039:&x27;选择第二个&x27;:不是';std&x27; 我正在移植一个大型的C++ COM项目,从VS2008到VS2010。有一行代码如下,在我的VS2008项目中编译得很好,但在VS2010中编译时给出了引用的错误: std::select2nd<std::map<DWORD, ISomethingUseful*>::value_type>());

Visual Studio 2008->;2010端口:错误C2039:&x27;选择第二个&x27;:不是';std&x27; 我正在移植一个大型的C++ COM项目,从VS2008到VS2010。有一行代码如下,在我的VS2008项目中编译得很好,但在VS2010中编译时给出了引用的错误: std::select2nd<std::map<DWORD, ISomethingUseful*>::value_type>());,c++,visual-c++,C++,Visual C++,我知道这是一个“非标准”函数,但最初编写这段代码的人在VS2008的std名称空间中找到了它,无论他们使用哪一个#include,在VS2010中似乎都不再正确 有人知道这个函数现在在VS2010中的位置吗?具体来说,现在需要包括哪个头文件才能使用它 编辑:为了暂时解决这个问题,我从VS2008 VC\include\functional头文件中获取了代码,并将其包含在我的代码库中(在一个实用程序类中),如下所述 如果其他人能够提供任何见解,我将不胜感激 这个问题的答案似乎是,VS2008通过

我知道这是一个“非标准”函数,但最初编写这段代码的人在VS2008的std名称空间中找到了它,无论他们使用哪一个#include,在VS2010中似乎都不再正确

有人知道这个函数现在在VS2010中的位置吗?具体来说,现在需要包括哪个头文件才能使用它


编辑:为了暂时解决这个问题,我从VS2008 VC\include\functional头文件中获取了代码,并将其包含在我的代码库中(在一个实用程序类中),如下所述


如果其他人能够提供任何见解,我将不胜感激

这个问题的答案似乎是,VS2008通过函数库支持std::select2nd(…)函数,但它在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);
    }
};
template struct select2nd:public std::一元函数
{   
//一元二次对选择算子的函子
常量类型名对::第二个类型和运算符()(常量对和左)常量
{   
//对成对操作数应用第二个选择器运算符
返回(左,第二);
}
};

这个问题的答案似乎是,VS2008通过函数库支持std::select2nd(…)函数,但它在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);
    }
};
template struct select2nd:public std::一元函数
{   
//一元二次对选择算子的函子
常量类型名对::第二个类型和运算符()(常量对和左)常量
{   
//对成对操作数应用第二个选择器运算符
返回(左,第二);
}
};

您确定编写此代码的人在std中找到了函数,而不是将函数添加到std中吗?@DigitalDa,这与问题有什么关系?我尝试搜索VS2010库,它看起来根本没有包含在内。此引用似乎表明它是一个SGI非标准函数:。看起来它与“.second”的功能相同,不过您可以尝试一下,或者自己编写函数并将其实现为“.second”。从外观上看,它是stl_function.h的一部分,它是functional的旧头。在SGI实现中,甚至有一条注释://select1st和select2nd是扩展:它们不是标准的一部分。如果需要,您可以从www.sgi.com/tech/stl/stl_function.h获取代码。现在,我已经通过复制select2nd函数的VS2008实现,并将其包含在我的代码库中,实现了这一点。我将拭目以待,看看是否有人能想出更好的答案,如果没有,我将在这里发布解决方案,包括供子孙后代使用的源代码!感谢您目前的帮助。您确定编写此代码的人在std中找到了函数,而不是将函数添加到std中吗?@DigitalDa,这与问题有什么关系?我尝试搜索VS2010库,它看起来一点都不包含。此引用似乎表明它是一个SGI非标准函数:。看起来它与“.second”的功能相同,不过您可以尝试一下,或者自己编写函数并将其实现为“.second”。从外观上看,它是stl_function.h的一部分,它是functional的旧头。在SGI实现中,甚至有一条注释://select1st和select2nd是扩展:它们不是标准的一部分。如果需要,您可以从www.sgi.com/tech/stl/stl_function.h获取代码。现在,我已经通过复制select2nd函数的VS2008实现,并将其包含在我的代码库中,实现了这一点。我将拭目以待,看看是否有人能想出更好的答案,如果没有,我将在这里发布解决方案,包括供子孙后代使用的源代码!谢谢你迄今为止的帮助。