函数模板中的默认模板化参数

发布于 2024-10-12 19:32:14 字数 655 浏览 3 评论 0原文

我正在回答这个问题。我意识到当我不知道自己在说什么时我就说漏了嘴。

所以我的问题是这样的。是否可以将这些功能合并为一个? (不用担心这是一个已经存在的函数的精确副本,我只是将其用作示例)

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)。

I was answering this question. And I realized that I ran my mouth off when I didn't know what I was talking about.

So my question is this. Is it possible to merge these functions in to one? (don't worry that this is an exact duplicate of a function that already exists, I'm just using it as an example)

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

Furthermore, is re-using the code from the first in the second even possible without using C++0x features(decltype).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

呆橘 2024-10-19 19:32:14

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

遗憾的是,没有。函数模板参数不能有默认模板参数,并且默认函数参数不能用于推导模板参数。

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

是的:您可以使用 std::iterator_traits::value_type

Is it possible to merge these functions in to one?

Sadly, no. You can't have a default template argument for a function template parameter and default function arguments cannot be used to deduce template arguments.

Is re-using the code from the first in the second even possible without using C++0x features?

Yes: you can use std::iterator_traits<T>::value_type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文