在VS2008项目中尝试使用std::select1st
中的<functional>
时,我发现它是由_HAS_TRADITIONAL_STL
后卫设置的。{/ p>
这是否有原因?
在包含_HAS_TRADITIONAL_STL
之前简单定义<functional>
是否安全?
答案 0 :(得分:7)
默认情况下std::select1st
不存在的原因是它不是C ++标准库的一部分。它是标准模板库(STL)的一部分,未被C ++标准采用。
我在_HAS_TRADITIONAL_STL
的MSDN上找不到任何文档,并且它似乎没有在随Visual Studio 2010一起发布的标准库版本中使用。它可能包含在Dinkumware的库中当他们将它交付给微软时。
据说,如果你想使用std::select1st
,那么可能是安全的。请注意,使用该标志启用的任何内容都是特定于实现和不可移植的(甚至可能在Visual C ++版本之间更改)。您可能最好实现自己的select1st
函数:
template <typename PairT>
struct select1st : public std::unary_function<PairT, typename PairT::first_type>
{
typename PairT::first_type operator()(const PairT& a) { return a.first; }
};