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

时间:2015-04-29 09:09:17

标签: c++ std

我有方法:

#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

1 个答案:

答案 0 :(得分:1)

鉴于你有

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

你可以做到

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