」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用“...”標記在 C++ 可變參數模板中打包和解包參數?

如何使用“...”標記在 C++ 可變參數模板中打包和解包參數?

發佈於2024-11-16
瀏覽:681

How do you use the \

可變參數範本中「...」標記的語法規則

在C 中,可變參數範本可以建構接受參數數量可變。 「...」標記在此上下文中起著至關重要的作用,充當參數包或參數解包器。

省略號放置的語法規則

The “...”標記的位置決定了其功能:

  • Pack : 當它出現在名稱的左邊時,「...」表示參數套件: ...thing // pack
  • Unpack: 當它出現在表達式的右邊時,「...」解壓縮範本參數pack: thing... // unpack

範例:有「...」的可變參數範本

考慮以下可變參數模板:

template
unique_ptr make_unique( Args&&... args )
{
    return unique_ptr(new T(std::forward(args)...));
}

在此範例中,「...」用作參數包,而函數實作中的「...」將參數解包到 args 變數中。

省略號放置不同的原因

模板參數列表和參數列表之間省略號放置的差異是由於參數打包和參數解包之間的區別造成的。在模板參數清單中,「...」表示參數應打包為單一參數包,而在參數清單中,「...」表示參數應解包為單獨的參數。

解包模式

當「...」作為解包器出現在表達式的右側時,它遵循特定的模式:

  • “...”左側的表達式重複,以逗號分隔
  • 每個重複表示一個使用模板參數包中單個元素的表達式

高階用法:初始化陣列

省略號也可用於初始化陣列:

struct data_info
{
     boost::any  data;
     std::size_t type_size;
};

std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}

這用值初始化向量v,其中每個元素都是包含args 和sizeof(T) 對的結構體。

結論,可變參數範本上下文中的「...」標記既充當參數包又充當參數解包器,遵循放置和解包模式的特定語法規則。其靈活的使用允許強大的模板構造和定制。

最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-16
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-16
  • 如何在 SQL 中計算某個值的總和,同時確保每行只計算一次?
    如何在 SQL 中計算某個值的總和,同時確保每行只計算一次?
    在SQL 中使用SUM() 將不同值分組在MySQL 查詢中,您想要計算下列值的總和轉換表,同時確保每行僅計算一次。為了實現這一點,您需要將 DISTINCT 關鍵字與 SUM() 函數結合使用。但是,您遇到了重複行導致 SUM() 結果膨脹的問題。 要解決此問題,請考慮表中的主鍵關係。如果 con...
    程式設計 發佈於2024-11-16
  • Vite中環境變數的處理
    Vite中環境變數的處理
    在現代 Web 開發中,管理敏感資料(例如 API 金鑰、資料庫憑證以及不同環境的各種配置)至關重要。將這些變數直接儲存在程式碼中可能會帶來安全風險並使部署變得複雜。 Vite,一個現代的前端建構工具,提供了一種透過.env檔案管理環境變數的簡單方法。 什麼是 .env 檔? .env 檔案是一...
    程式設計 發佈於2024-11-16
  • 如何使用 Django REST Framework 高效處理嵌套序列化器中的外鍵分配?
    如何使用 Django REST Framework 高效處理嵌套序列化器中的外鍵分配?
    Django REST Framework 中的嵌套序列化器的外鍵分配Django REST Framework (DRF) 提供了一個管理外鍵關係的便捷方法序列化資料。然而,在嵌套序列化器中獲得所需的行為可能具有挑戰性。 嵌套序列化器中的外鍵分配嵌套序列化器繼承其父序列化器的行為。預設情況下,它們...
    程式設計 發佈於2024-11-16
  • 如何從 CodeIgniter URL 中刪除「index.php」?
    如何從 CodeIgniter URL 中刪除「index.php」?
    CodeIgniter .htaccess 和URL 重寫問題導航CodeIgniter 應用程式通常需要從URL 中刪除“index.php”,以允許使用者造訪具有更清晰語法的頁面。不過,新用戶在這個過程中可能會遇到困難。 刪除“index.php”的關鍵在於修改應用程式設定檔(applicati...
    程式設計 發佈於2024-11-16
  • 您可以在 `` 標籤內嵌套更多的 `` 元素嗎?
    您可以在 `` 標籤內嵌套更多的 `` 元素嗎?
    不常見的 HTML 結構: 可以容納 以外的標籤嗎? 在 HTML 世界中,嵌套標籤可以創建複雜的結構。然而,某些標籤的放置有時會受到限制。以神秘的 標籤為例,許多人認為它只能嵌套 元素。 深入研究:您的詢問源於探索標籤是否有效的願望除了 之外的其他人都可以在 中找到一個家。為了揭開這個概念的...
    程式設計 發佈於2024-11-16
  • 如何使用 XPath 條件選擇 XML 文件中的特定節點?
    如何使用 XPath 條件選擇 XML 文件中的特定節點?
    利用 XPath 條件選擇節點透過 XPath 導覽 XML 文件時,通常需要根據特定條件限制檢索的節點。在此範例中,我們的任務是根據日期屬性選擇性地檢索節點。 以下XPath 表達式從提供的XML 文件中擷取所有 節點:$nodes = $xml->xpath('//xml/events')...
    程式設計 發佈於2024-11-16
  • 為什麼「margin: auto」不能與絕對定位的元素一起使用?
    為什麼「margin: auto」不能與絕對定位的元素一起使用?
    了解絕對定位邊距自動問題當將“position:absolute”應用於具有“margin-left:auto”和“的元素時margin-right: auto”,您可能會注意到邊距似乎沒有效果。此行為不同於“位置:相對”,其中邊距按預期工作。為了理解這種差異,讓我們更深入地研究底層機制。 當一個元...
    程式設計 發佈於2024-11-16
  • Go 如何處理方法中的指標和值接收者?
    Go 如何處理方法中的指標和值接收者?
    Go 指標:接收者和值類型Go 指標:接收者和值類型在Go 中,指針對於理解物件導向程式設計和記憶體管理是必不可少的。在處理指標時,掌握方法中接收器類型之間的差異至關重要。 type Vertex struct { X, Y float64 } func (v *Vertex) Abs() ...
    程式設計 發佈於2024-11-16
  • 如何從 Python 中的字串清單建立多個變數?
    如何從 Python 中的字串清單建立多個變數?
    如何從字串清單建立多個變數? [重複]許多程式場景要求我們同時操作多個物件或變數。一個常見的挑戰是從字串列表建立多個變量,其中每個變數的名稱與列表中的對應元素相符。 在 Python 中,您可以使用字典理解來完成此操作:names = ['apple', 'orange', 'banana'] fr...
    程式設計 發佈於2024-11-16
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-16
  • 外鍵可以引用多型關聯中的多個表嗎?
    外鍵可以引用多型關聯中的多個表嗎?
    多態外鍵:一個外鍵可以引用多個表嗎? 關聯式資料庫中外鍵的概念通常涉及指定確切的目標參考列應指向的表。然而,在處理多態關聯時,其中一個表與一組中的多個其他表有關係,就會出現問題:是否可以有一個可以引用這些表中任何一個表的外鍵? 答案:否在MySQL和PostgreSQL中,外鍵約束只能引用單一父表。...
    程式設計 發佈於2024-11-16
  • 如何以字串陣列的形式檢索 TypeScript 介面的鍵?
    如何以字串陣列的形式檢索 TypeScript 介面的鍵?
    以字串陣列的形式存取 Typescript 介面的按鍵簡介在 Typescript 中處理表格資料需要使用介面來定義列結構。為了有效地操作這些結構,通常需要以字串陣列的形式檢索這些介面的屬性名稱。 解決方案使用自訂轉換器自 Typescript 版本 2.4 起,自訂轉換器提供了一種從介面中提取金鑰...
    程式設計 發佈於2024-11-16
  • 如何在JPA中使用複合主鍵實現資料版本控制?
    如何在JPA中使用複合主鍵實現資料版本控制?
    使用JPA 進行複合主鍵處理資料版本控制需要能夠使用不同版本複製實體,因此創建複合主鍵至關重要實體的主鍵。 具有複合主鍵的實體定義In JPA,複合主鍵可以使用@EmbeddedId或@IdClass註解來定義。 使用@EmbeddedId為key,然後在實體中用@EmbeddedId註解:@Ent...
    程式設計 發佈於2024-11-16

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3