如何制作一个将函数作为参数的类方法? [复制]

Posted

技术标签:

【中文标题】如何制作一个将函数作为参数的类方法? [复制]【英文标题】: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;
    

【问题讨论】:

std::sort() takes a user-definable comparator @AdrianMole:C++ 还有其他技术。例如。函子,std::function,lambdas。 C 欺骗是一个糟糕的选择,尤其是如果这是一个 X/Y 问题(即重新发明***)。 @underscore_d 我找了一个 C++ 骗子,但那只是指向 C 版本:***.com/q/6339970/10871073 【参考方案1】:

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

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

然后这样称呼它:

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

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

【讨论】:

以上是关于如何制作一个将函数作为参数的类方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将类对象作为参数传递给不同的类方法?

如何将使用参数包和类型名的类作为函数的输入参数(c++)

当我们将对象作为参数传递给方法时,为啥会调用复制构造函数?

如何使用参数制作 Bash 函数? [复制]

如何制作一个将 Activity 和 Fragment 作为参数上下文的函数

通过函数传递未命名的类