簡體   English   中英

使用 std::bsearch 問題沒有合適的轉換 function 比較器錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM