私が得た:
「object.h」
namespace objectNS
{
class object
{
public:
int m_number;
bool operator== (const object& object) const;
bool operator< (const object& object) const;
};
class compare
{
public:
bool operator ()(const object*, const object*) const;
};
}
「object.cpp」
#include "object.h"
typedef objectNS::object OBJECT;
bool OBJECT::operator== (const object &object) const
{
return this->m_number == object.m_number;
}
bool OBJECT::operator< (const object &object) const
{
return this->m_number < object.m_number;
}
bool objectNS::compare::operator() (const object* obj1, const object* obj2) const
{
return obj1->m_number > obj2->m_number;
}
オブジェクトで動作する関数を取得しました。
void f(void)
{
set<Compound_object*> detectedObjects;
set<Compound_object*> deleteFromTrackedObjects;
set_difference(detectedObjects.begin(), detectedObjects.end(), this->m_trackedObjects.begin(), this->m_trackedObjects.end(), inserter(addToTrackedObjects, addToTrackedObjects.end()));
}
問題の説明:
実装operator<
しoperator==
、2つのインスタンスの比較を実行しましたm_number
が、同じ要素を設定detectedObjects
して含む場合、期待どおりに空の結果セットではなくすべての要素を返します。trackedObjects
m_number
std::set_difference
compare
テンプレート引数としてセットに機能オブジェクトを与えようとさえしましたが、その結果、適切に定義されていないこと=
について多くのコンパイラエラーが発生しました。!=
何が問題なのかしら?