C 11 中的函數別名
在 C 11 中,使用 using 指令對類別進行別名非常簡單。然而,為函數創建別名更具挑戰性。
問題:
考慮以下命名空間和函數宣告:
<code class="cpp">namespace bar { void f(); }</code>
嘗試別名使用g = bar::f; 的函數將導致錯誤,因為“f”不是“bar”命名空間中的類型。
完美轉發的乾淨解決方案:
建立函數別名,可以使用完美轉發:
<code class="cpp">template<typename... Args> auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) { return f(std::forward<Args>(args)...); }</code>
此解決方案確保g 將所有參數正確轉送給f,即使f 被重載或函數模板也是如此。
別名的定義:
別名或B 是物質A 的實體,確保在原始碼中對A 的任何用法(不包括聲明或定義)替換B都會導致編譯後的結果不變程式碼。
範例:
定義 g 別名後,以下程式碼將透過別名呼叫 f:
<code class="cpp">g(1, 2, 3); // Calls bar::f(1, 2, 3);</code>
以上是如何在 C 11 中建立函數別名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!