我定義在C新struct
:重載操作者()爲一個新的結構
typedef struct TypedObject {
ObjectType type;
void * value;
} TypedObject;
其中對象類型是一個枚舉:
typedef enum ObjectType {
type_node,
type_int,
type_error,
} ObjectType;
我想創建一個C++設定的TypedObject
指針並從以前的問題我明白,我需要超載operator()
爲了比較插入到集合TypedObject
指針。
所以我做了如下:
#ifdef __cplusplus
typedef struct {
bool operator() (const TypedObject *lhs, const TypedObject *rhs){
return (lhs->type==rhs->type) && (lhs->value==rhs->value);
}
} ObjComparator;
#endif
假設我定義了一組:
std::set<TypedObject *, ObjComparator> mySet;
你可以假設我用一個迭代器遍歷雖然集。
我想插入TypedObject x
到集合中。我用mySet.insert(&x)
來插入它的地址..但是一旦我使用mySet.find(&x)
,它找不到x
。撥打電話operator()
,但未按預期進行比較。
任何想法是什麼問題可能與我超載的方式operator()
?我究竟做錯了什麼? 另外,我是否應該重載不同版本的運營商,如<或==?
那好吧。我應該使用<運算符來比較類型和地址嗎? – baronzo1
@ baronzo1我已經添加了我對可能的解決方案的想法:) – Ap31
謝謝。我會試着看看它是否有效。 – baronzo1