如何使函数像运算符<template>()形式<functional>

How to make function like operator<template>() form <functional>

本文关键字:gt lt 形式 functional 何使 template 函数 运算符      更新时间:2023-10-16

我有方法:

#include <vector>
#include <numeric>
template <typename T>
class mVector: public std::vector<T> {
    template<typename Operation>
    T accumulate (Operation op, T init = (T)0) {
        typename mVector<T>::const_iterator begin = this->begin();
        typename mVector<T>::const_iterator end = this->end();
        return std::accumulate(begin, end, init, op);
    }
};

我可以用它来传递例如std::plus<int>这样:

#include <functional>
V.accumulate(std::plus<int>());

的问题是如何制作我自己的函数,我将能够以这种方式传递。例如:

V.accumulate(f<int>());

f(x, y) = x+y-1在哪里

如果你完全想要这种语法,f函子模板

template <typename T>
struct f
{
    T operator() (const T& a, const T& b) const
    {
        return a+b-1;
    }
};

否则,您可以只使用函数模板,就像安东的答案一样。

鉴于你有

template <typename T>
T f(T x, T y) {
    return x+y-1;
}

你可以简单地做

mVector<int> v;
v.accumulate(f<int>);