在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中文網其他相關文章!