2009-02-11 25 views
0

下面的代码是否便携?STL typedef的便携性如何?

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); 
} 

具体地说我质疑超载性病的便携:: iterator_traits <> :: difference_type。如果它的typedeffed,例如,int *(因为bizzare可能;我认为标准不禁止这个),然后调用iseq()为一个int数组将是不明确的。

关于iterator_traits <> typedefs的标准保证是什么?

回答

1

difference_type必须是一个整数类型,所以int*是out。

0

根据Josuttis,你应该应该使用typedefs为了更灵活和适当的通用。他所有的例子都是以“这里有一个快速的方式来做”为出发点,这些例子都是基于STL typedef的例子。