次のようなクラスがあります。テンプレート引数としてコンパレーターを必要とするブースト ライブラリのペアリング ヒープを使用しています。私のコンパレータは、比較を行うためにクラス A のデータとメンバーにアクセスする必要があります。最初に、「my_compare」を構造体として宣言し、() 演算子をオーバーロードしました。しかし、クラス A へのポインタ ('this') が渡されない限り、構造体はクラス A のデータにアクセスできませんでした。しかし、それは my_compare がコンパイル時の定数ではなくなったことを意味し、エラーが発生します: 'this' cannot appear in constant expression.
2 回目の試行として、my_compare をメンバー関数として宣言しました (メンバーとデータにアクセスできるようにするため)。次のエラーが表示されます:
error: type/value mismatch at argument 1 in template parameter list for
‘template<class T> struct boost::heap::compare’
「my_compare」は(関数)オブジェクトではなく、「this」が暗黙的に渡されるため、バイナリ関数ではありません。この問題を解決するにはどうすればよいですか。
class A{
public:
//some data(properties)
struct c{
//some data
};
double method1(int variable);
double method2(const struct c&);
bool my_compare(struct c& c, struct c& d){
//accesses member methods and data
}
typedef boost::heap::pairing_heap<struct c, boost::heap::compare<my_compare> > myheap;
}