STL typedef的可移植性如何?

时间:2009-02-11 20:28:39

标签: c++ stl

以下代码是否可移植?

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&lt;&gt; :: difference_type上的重载的可移植性。如果它的typedeffed to,比如int *(因为可能是bizzare;我认为标准不禁止这个)然后调用iseq()获取一个int数组将是不明确的。

iterator_traits&lt;&gt;的标准保证是什么?类型定义

2 个答案:

答案 0 :(得分:1)

difference_type必须是整数类型,因此int*已出局。

答案 1 :(得分:0)

根据Josuttis的说法,你使用typedef,以便更灵活,更通用。他的所有例子都是从“这是一个快速的方法”开始的,这些例子导致了基于STL typedef的例子。

相关问题