如何使函数像 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 的回答那样使用函数模板。
我有方法:
#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 的回答那样使用函数模板。