代码之家  ›  专栏  ›  技术社区  ›  wilhelmtell

STL typedef的可移植性如何?

  •  0
  • wilhelmtell  · 技术社区  · 16 年前

    template<typename In>
    struct input_sequence_range : public pair<In,In> {
        input_sequence_range(In first, In last) : pair<In,In>(first, last) { }
    };
    
    template<typename Arr>
    input_sequence_range<Arr*> iseq(Arr* a,
                                    typename iterator_traits<Arr*>::difference_type n)
    {
        return input_sequence_range<Arr*>(a, a + n);
    }
    
    template<typename Iter>
    input_sequence_range<Iter> iseq(Iter first, Iter last)
    {
        return input_sequence_range<Iter>(first, last);
    }
    

    我特别质疑std::iterator_traits上重载的可移植性<>::不同类型。如果它的typedefed是int*(尽管这可能很奇怪;我认为标准并不禁止这样做),那么为int数组调用iseq()将是不明确的。

    迭代器特性的标准保证是什么<&燃气轮机;typedefs?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Motti    16 年前

    difference_type 必须是整型,以便 int*

        2
  •  0
  •   Harper Shelby damiankolasa    16 年前

    据约瑟蒂斯说,你 应该 使用typedefs可以更灵活、更通用。他所有的例子都是从“这是一个快速的方法”开始的,这些例子都是基于STL typedefs的。