在尝试在 VS2008 项目中使用来自 std::select1st
的 <functional>
时,我发现它被 _HAS_TRADITIONAL_STL
守卫 ifdef 了。
_HAS_TRADITIONAL_STL
之前简单地定义 <functional>
是否安全? 最佳答案
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; }
};
关于c++ - 定义 _HAS_TRADITIONAL_STL 以启用 STL 功能是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2504562/