[英]use of std::bsearch issues no suitable conversion function error for comparator
我使用std::bsearch
訪問some_file
的 scope 中定義的 some_file:
int foo = bsearch(&key, (int *)arr + 1, count, sizeof(int),
[&](int *offset_a, int *offset_b) -> int
{ string name_a = *(string *)((int *)some_file + *offset_a);
});
我得到:
沒有從“lambda [](const int *offset_a, const int *offset_b)->int”到“__compar_fn_t”的合適轉換 functionC/C++(413)
我想知道如何在不影響功能的情況下解決這個問題。
正如您在std::bsearch
文檔中所見:
比較 function 的簽名應該等同於以下內容:
int cmp(const void *a, const void *b);
即comp
應該是一個 C 樣式的 function 指針或可以轉換為一個的東西。
帶有捕獲的 lambda(就像您的情況一樣,由於[&]
)無法轉換為 C 樣式 function 指針。
這是因為帶有捕獲的 lambda 實際上是帶有調用運算符的底層類,以及用於捕獲的數據成員。
更多信息: Lambda 表達式。
您需要使用普通的 function 指針,或不進行任何捕獲的 lambda。
編輯:
或者(正如@KonradRudolph 評論的那樣),您可以將 C function bsearch
替換為類似的 C++ function,例如std::lower_bound
,您可以在其中為比較器傳遞任何 lambda。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.