首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将std::plus<>()作为谓词传递

将std::plus<>()作为谓词传递
EN

Stack Overflow用户
提问于 2014-06-06 14:38:28
回答 1查看 1.4K关注 0票数 2

我需要将std::plus<>()作为谓词传递给一个函数,该函数可以进行类似的积累,但我不太确定如何实现这一点。我想将std::plus传递给的模板参数是:

代码语言:javascript
运行
复制
Pred && op

当我尝试使用std::plus作为op

代码语言:javascript
运行
复制
return detail::reduce(..., std::plus<>()); //.... op = std::plus<>()

但这不起作用,我得到了错误的error C2976: 'std::plus' : too few template arguments,我应该看到它即将到来,但我不知道如何处理这个问题,并正确传递加法。

我使用op的一个上下文是:

代码语言:javascript
运行
复制
std::accumulate(first, last, std::forward<T>(init),
                        std::forward<Pred>(op)));

detail::reduce的过载之一

代码语言:javascript
运行
复制
template <typename ExPolicy, typename InIter, typename T, typename Pred>
typename detail::algorithm_result<ExPolicy, T>::type
reduce_seq(ExPolicy const&, InIter first, InIter last, T && init,
    Pred && op)
{
    try {
        return detail::algorithm_result<ExPolicy, T>::get(
            std::accumulate(first, last, std::forward<T>(init),
                std::forward<Pred>(op)));
    }
    catch(std::bad_alloc const& e) {
        boost::throw_exception(e);
    }
    catch (...) {
        boost::throw_exception(
            hpx::exception_list(boost::current_exception())
        );
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:56:20

如果要将谓词指定为函数参数,则必须为std::plus提供一个类型,如在此上下文中所示:

代码语言:javascript
运行
复制
some_function(std::plus<T>());

但是,可以直接将其作为模板参数:如下所示:

代码语言:javascript
运行
复制
template < template < class > class PRED, class T >
T foo(T a,T b)
{
    return PRED<T>()(a,b);
}
int main()
{
    int a = 1;
    int b = 1;
    foo<std::plus>(a,b);
    return 0;
}

就你的情况而言,我认为这是可行的:

代码语言:javascript
运行
复制
template <template <typename> typename Pred, typename ExPolicy, typename InIter, typename T >
typename detail::algorithm_result<ExPolicy, T>::type reduce_seq(ExPolicy const&, InIter first, InIter last, T && init)
{
   stuff = Pred<T>()(some_value,other_value);
}

//usage:
reduce_seq<std::plus>(arguments...);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24084471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档