提问者:小点点

我怎样才能制作一个以函数为参数的类方法呢? [副本]


我想在类内部创建一个方法(但我认为这是无关的),该方法根据特定函数返回的bool值对向量进行排序。。。 我读到这是可能的,但我不知道怎么做。

我希望调用该函数并将(例如)><作为参数,这样我就不必创建两个几乎完全相同的函数。

我如何想象函数的主体:

for (int i = 0 ; i < DIM - j; i++)
{
    if (some_function(v[i], v[i+1]))
    {
        int temp;
        temp = v[i];
        v[i] = v[i+1];  
        v[i+1] = temp;
    }
}

共1个答案

匿名用户

您可以通过传入一个函数对象来完成此操作:

template <typename Op>
void f(Op op) {
  // ...
  if (op(v[i], v[i+1])) // ...
}

这样称呼它:

f(std::less{});    // for <
f(std::greater{}); // for >

当然,这里的f只是一个例子,但是您只需要通过这种方式为自己的函数添加一个模板参数即可。