功能模板中的默认模板参数

时间:2011-01-19 17:04:18

标签: c++ templates default-value

我正在回答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),也可以重复使用第二个中的第一个代码。

1 个答案:

答案 0 :(得分:4)

  

是否可以将这些功能合并为一个?

可悲的是,没有。您不能拥有函数模板参数的默认模板参数,并且默认函数参数不能用于推导模板参数。

  

在不使用C ++ 0x功能的情况下,是否可以重用第二个中的第一个代码?

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