関数を持つクラスがあります
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(...) は、それぞれのソート順を使用する必要があります。
これを行う方法がわかりませんでした。シンプルなソリューションが欲しいです (テンプレートなどをサポートする必要はありません)。必要に応じてブーストを使用したいと思いますが、ブーストを使用しないソリューションが優先されます。
達成したいことを説明できたと思いますか?助けてくれてありがとう!