定义_HAS_TRADITIONAL_STL以启用STL功能是否安全?

Cat*_*kul 3 c++ windows winapi stl visual-studio-2008

在试图在VS2008项目中使用std::select1st<functional>,我发现它是由_HAS_TRADITIONAL_STL警卫提供的.

  • 是否有一个原因?

  • _HAS_TRADITIONAL_STL在包括之前简单定义是否安全<functional>

Jam*_*lis 7

std::select1st默认情况下不存在的原因是它不是C++标准库的一部分.它是标准模板库(STL)的一部分,未被C++标准采用.

我在MSDN上找不到任何文档_HAS_TRADITIONAL_STL,它似乎没有在随Visual Studio 2010发布的标准库版本中使用.它可能由Dinkumware在将它提供给Microsoft时包含在库中.

话虽如此,如果你想使用它可能是安全的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; }
};
Run Code Online (Sandbox Code Playgroud)