[問題] template + c qsort
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++
問題(Question):
請問使用template implement的 linked list
要對它的element做 sort的時候(裡面使用 qsort)
過程大概就是
scan整個list一次
做一個 array or pointer ex:
LinkList<T>::sort(int(*_cmp)(const void *a, const void *b))
{
m_exactly_cmp = _cmp;
T **src = new T*[list_size];
Node<T> *ptr = m_head;
size_t i = 0;
for(i = 0; ptr != NULL; ptr = ptr=>next)
src[i] = ptr;
...
}
然後想法是...
自己在使用者定義的 compare function _cmp
int _cmp(string &a, string &b)
{
return a.compare(b);
}
外面再加一層 warp做 dereference
想要做這樣的事情
template <typename T>
int LinkList<T>::warp_cmp (const void *a, const void * b)
{
T _a = (*(Node<T> **)a)->data;
T _b = (*(Node<T> **)b)->data;
return m_exactly_cmp(_a, _b);
}
然後call qsort
qsort(src, listSize, sizeof(Node<T> *), warp_cmp);
錯誤結果(Wrong Output):
編譯不會過 XD
因為... warp 是 int (Obj::)(const void *, const void *)
不是 int (*)(const void *, const void *)
請問在C++ template下面 想call cstdlib的 qsort
"中間要加一層 warp" 是辦的到的嗎...?
還沒找到好的解法...
--
也試過用 static member function for warp_cmp
不過_exactly_cmp 那邊assign也有問題...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.60.58
※ 編輯: EntHeEnd 來自: 1.162.60.58 (12/24 22:57)
※ 編輯: EntHeEnd 來自: 1.162.60.58 (12/24 22:59)
→
12/24 23:04, , 1F
12/24 23:04, 1F
→
12/24 23:04, , 2F
12/24 23:04, 2F
→
12/24 23:05, , 3F
12/24 23:05, 3F
→
12/24 23:05, , 4F
12/24 23:05, 4F
→
12/24 23:06, , 5F
12/24 23:06, 5F
※ 編輯: EntHeEnd 來自: 1.162.60.58 (12/24 23:07)
※ 編輯: EntHeEnd 來自: 1.162.60.58 (12/24 23:07)
※ 編輯: EntHeEnd 來自: 1.162.60.58 (12/24 23:08)
→
12/24 23:09, , 6F
12/24 23:09, 6F
→
12/24 23:10, , 7F
12/24 23:10, 7F
→
12/24 23:15, , 8F
12/24 23:15, 8F
→
12/24 23:16, , 9F
12/24 23:16, 9F
→
12/24 23:43, , 10F
12/24 23:43, 10F
→
12/25 02:36, , 11F
12/25 02:36, 11F
→
12/25 02:37, , 12F
12/25 02:37, 12F
→
12/25 02:39, , 13F
12/25 02:39, 13F
→
12/25 02:40, , 14F
12/25 02:40, 14F
→
12/25 02:59, , 15F
12/25 02:59, 15F
→
12/25 03:01, , 16F
12/25 03:01, 16F
→
12/25 03:01, , 17F
12/25 03:01, 17F
→
12/25 22:08, , 18F
12/25 22:08, 18F