首頁 > 後端開發 > C++ > 如何解決 std::for_each() 中重載函數的歧義?

如何解決 std::for_each() 中重載函數的歧義?

Barbara Streisand
發布: 2024-12-20 18:55:17
原創
764 人瀏覽過

How to Resolve Overloaded Function Ambiguity in std::for_each()?

std::for_each() 演算法中指向重載函數的指標

在C 中,可以有名稱相同但參數不同的函數,稱為函數超載。當將重載函數作為參數傳遞給 std::for_each() 等函數時,這可能會產生歧義。

問題:

考慮以下程式碼片段:

class A {
    void f(char c);
    void f(int i);

    void scan(const std::string& s) {
        std::for_each(s.begin(), s.end(), f);
    }
};
登入後複製

在此範例中,scan() 方法嘗試將重載函數) 傳遞給std::for_each()。但是,編譯器無法自動決定要使用 f() 的哪個重載。

解:

要指定所需的重載,可以使用 static_cast( ) 或 mem_fun() 函數指標。

方法一: Static_Cast()

// Uses the void f(char c); overload
std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));
// Uses the void f(int i); overload
std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f));
登入後複製

透過將函數指標強制轉換為特定類型,可以強制編譯器根據給定的函式簽章解析重載。

方法2:Mem_Fun()

如果f() 是成員函數,則可以使用mem_fun() 函數指標:

std::for_each(s.begin(), s.end(), std::mem_fun(&A::f));
登入後複製

這種方法需要您指定類別名稱和重載,這可能更冗長,但也更靈活。

以上是如何解決 std::for_each() 中重載函數的歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板