次のようなコードがあります。
class A{ // declaration is simplified
virtual void FNC1();
};
bool compare(S s1,S s2){
return s1<s2;
}
void A::FNC1(){
iterator it;
sort(it.begin(),it.end(),compare);
}
class B : public A{
virtual void FNC1();
};
void B:FNC1(){
iterator it;
// do something different
sort(it.begin(),it.end(),compare);
}
そこで、クラス B を使用してクラス A を継承し、関数 FNC1() をオーバーライドしましたが、問題は、std::sort() 関数のように、3 番目の変数は実際には関数である必要があり、そのような関数は常に直接宣言されています。コピーと貼り付けを避けて、Bにこの関数を直接継承させるにはどうすればよいか本当に知りたいです。compare() 関数を A のメンバー関数として配置しようとしましたが、コンパイルされません: sort(it.begin(), it.end(), this->compare);
比較関数を別のヘッダー ファイルにインクルードしようとすると、宣言できないと表示されます。Bにこの関数を正しく継承させるにはどうすればよいですか? 実際には、A のコードを再利用する必要がある 3 つのクラスがあり、比較関数は実際には複雑なものです。