【问题标题】:How can I make a class method that takes a function as a parameter? [duplicate]如何制作一个将函数作为参数的类方法? [复制]
【发布时间】:2020-10-31 07:49:54
【问题描述】:

我想在一个类中创建一个方法(但我认为这无关紧要),它根据特定函数返回的布尔值对向量进行排序......我读到这是可能的,但我不知道如何去做吧……

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

我如何想象函数的主体:

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;
    }
}

【问题讨论】:

标签: c++ sorting


【解决方案1】:

你可以通过传入一个函数对象来做到这一点:

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

然后这样称呼它:

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

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

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2018-03-02
    • 2016-11-30
    • 1970-01-01
    • 2015-11-08
    • 2010-11-04
    • 2015-09-28
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多