在试图在VS2008项目的<functional>
中使用std::select1st
,我发现它是由_HAS_TRADITIONAL_STL
守护进行的。
是否有一个原因?
在包含<functional>
之前简单定义_HAS_TRADITIONAL_STL
是否安全?
std::select1st
默认不存在的原因是它不是C ++标准库的一部分。 它是标准模板库(STL)的一部分,没有被采用到C ++标准中。
我在MSDN上找不到任何关于_HAS_TRADITIONAL_STL
文档,而且似乎也没有在随Visual Studio 2010发布的标准库的版本中使用_HAS_TRADITIONAL_STL
将它提供给Microsoft时可能会将其包含在库中。
std::select1st
,定义是否要使用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; } };