如何制作一个将函数作为参数的类方法? [复制]
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
这里只是一个例子,不过你只需要通过这种方式给自己的函数添加一个模板参数即可。
【讨论】:
以上是关于如何制作一个将函数作为参数的类方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章