2009-02-11 24 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的例子。