我有一個函數名爲反序列化,其作爲輸入:轉換無效*爲矢量<int>
int(*cmp)(void*,void*)
所以,該類型的任何功能可作爲由函數的參數。
舉例來說,如果我有一個點的結構是這樣的:現在
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;
}
什麼是做這種正確的方法是什麼?
你能解釋到底什麼是錯的?發生了什麼問題? – tohava
這是C++。你不必玩那些'無效*'遊戲。 – juanchopanza
你似乎在'vector_int_cmp'函數中缺少了一些圓括號。 –