2010-03-24 35 views

回答

7

原因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; } 
}; 
+0

Thanks!任何想法为什么select1st没有被选为标准的一部分?后卫的名字似乎暗示它是“传统”的一部分。 – Catskul 2010-03-24 00:41:39

+1

@Catskul:_traditional STL_指的是由SGI实施的原始标准模板库。大多数STL都包含在C++标准库中;有些东西不是(例如'select1st',至少现在是'hash_map')。我不知道为什么有些东西被排除在外;这里的其他人可能会比我更好地回答这个问题。 – 2010-03-24 00:47:02