2011-01-19 111 views
-1

我回答了this問題。我意識到,當我不知道我在說什麼時,我扯開了嘴巴。功能模板中的默認模板參數

所以我的問題是這樣的。是否有可能將這些函數合併爲一個? (不要擔心,這是一個已經存在,我只是用它作爲一個例子的功能完全相同的副本)

template <class iterType1, class iterType2, class boolPred> 
bool equal(iterType1 begin, iterType1 end, iterType2 e, boolPred pred){ 

    while(begin != end){ 
     if(!pred(*begin, *e)) 
      return false; 
     ++begin; 
     ++e; 
    } 
    return true; 
} 

template <class iterType1, class iterType2> 
bool equal(iterType1 begin, iterType1 end, iterType2 e){ 
    return equal(begin, end, e, std::equal_to<decltype(*begin)>()); 
} 

此外,重新使用從第一代碼的第二連可能不使用C++ 0x功能(decltype)。

回答

4

是否有可能將這些函數合併爲一個?

不幸的是,沒有。您不能爲函數模板參數設置默認模板參數,並且不能使用默認函數參數來推斷模板參數。

即使不使用C++ 0x功能,也可以在第二個代碼中重新使用代碼?

是:你可以使用std::iterator_traits<T>::value_type