gpt4 book ai didi

c++ - 通过函数传递自定义比较器

转载 作者:太空狗 更新时间:2023-10-29 23:46:36 24 4
gpt4 key购买 nike

我有一个带有函数的类

MyClass::doStuff(std::vector<MyCustomData*> toSort) { ...

我在其中调用

std::sort(toSort.begin(), toSort.end(), MyClass::SortByZ());

myClass::SortByZ() 是一个自定义比较器。现在这可行,但我想实现以下目标:

我有几个类,每个类都应该有自己的比较仿函数来对“MyCustomData”进行排序。所以例如Class1...应该有

class Class1 {
struct SortData {
bool operator ()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something1 > rhs->something1;
}
};
//...many more functions/vars
}

虽然 Class2 对于相同的数据类型有不同的比较仿函数,例如

class Class2 {
struct SortData {
bool operator ()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something2 > rhs->something2;
}
};
//...many more functions/vars
}

现在我希望能够调用函数 MyClass::doStuff(...) 中的任何一个

doStuff(myData, Class1::SortData)

doStuff(myData, Class2::SortData)

并且函数 MyClass::doStuff(...) 应该使用相应的排序顺序。

我没有找到这样做的方法,有吗?我想要一个简单的解决方案(不必支持模板或任何东西)。如果需要,我愿意使用 boost,但首选不带 boost 的解决方案。

我希望我能够描述我想要实现的目标?感谢您的帮助!

最佳答案

您必须将 doStuff 设为模板:

template <typename Comparator>
void doStuff(std::vector<MyCustomData*> toSort, Comparator compare) {
// ...
std::sort(toSort.begin(), toSort.end(), compare);
// ...
}

此外,它可能希望通过引用获取第一个参数。实际上,它将对参数的拷贝进行排序,丢弃该拷贝,并保持调用者的 vector 不变;尽管也许这就是您想要的。

关于c++ - 通过函数传递自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com