如何使函数像 operator<template>() 形式 <functional>

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

我有方法:

#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

假设你有

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

你可以简单地做

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

如果您确实需要那种语法,请将 f 设为函子模板:

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

否则,您可以像 Anton 的回答那样使用函数模板。