定义_HAS_TRADITIONAL_STL以启用STL功能是否安全?
问题描述:
在试图在VS2008项目中使用<functional>
的std::select1st
时,我发现它是由_HAS_TRADITIONAL_STL
后卫设计出来的。定义_HAS_TRADITIONAL_STL以启用STL功能是否安全?
这是有原因吗?
在包括
<functional>
之前简单定义_HAS_TRADITIONAL_STL
是否安全?
答
原因std::select1st
不存在默认的是,它不是C++标准库的一部分。它是未被采用到C++标准中的标准模板库(STL)的一部分。
我找不到任何关于_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; }
};
Thanks!任何想法为什么select1st没有被选为标准的一部分?后卫的名字似乎暗示它是“传统”的一部分。 – Catskul 2010-03-24 00:41:39
@Catskul:_traditional STL_指的是由SGI实施的原始标准模板库。大多数STL都包含在C++标准库中;有些东西不是(例如'select1st',至少现在是'hash_map')。我不知道为什么有些东西被排除在外;这里的其他人可能会比我更好地回答这个问题。 – 2010-03-24 00:47:02