我有一个名为反序列化的函数,它作为输入:
int(*cmp)(void*,void*)
因此,该类型的任何函数都可以作为函数的参数。
例如,如果我有这样的 Point 结构:
typedef struct{
int x, y;
}Point;
现在,为此我的 cmp 函数是这样的:
int point_cmp(void* _p1, void* _p2){
Point* p1=(Point*)_p1;
Point* p2=(Point*)_p2;
return (!((p1->x==p2->x) && (p1->y==p2->y)));
}
这行得通。
但我想为向量做这个。
我想编写一个vector_cmp 函数,它可以像point_cmp 一样传递以进行反序列化。所以,我已经尝试过这样的事情,但它是错误的:
int vector_int_cmp(void* _v1, void* _v2){
vector<int> *v1 = vector<int> *_v1;
vector<int> *v2 = vector<int> *_v2;
auto diff = 0;
auto v1_it = v1->begin();
auto v2_it = v2->begin();
while(v1_it != v1->end() && v2_int != v2->end()){
if(*v1_it != *v2_it) diff++;
v1_it++;
v2_it++;
}
if(0 == diff && (v1_it != v1->end() || v2_it != v2->end())) diff = 1;
return diff;
}
这样做的正确方法是什么?