以下代码是否可移植?
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;的标准保证是什么?类型定义
答案 0 :(得分:1)
difference_type
必须是整数类型,因此int*
已出局。
答案 1 :(得分:0)
根据Josuttis的说法,你应使用typedef,以便更灵活,更通用。他的所有例子都是从“这是一个快速的方法”开始的,这些例子导致了基于STL typedef的例子。