首頁  >  文章  >  後端開發  >  如何在 C 中使用非預設可構造型別優雅地初始化 `std::array` ?

如何在 C 中使用非預設可構造型別優雅地初始化 `std::array` ?

Susan Sarandon
Susan Sarandon原創
2024-10-27 20:17:01934瀏覽

 How to Elegantly Initialize `std::array` with Non-Default Constructible Types in C  ?

std::array 的優雅初始化具有非預設可構造類型

在C 領域, std::array ;提供了一種處理固定大小數組的便捷方法。然而,在處理缺少預設構造函數的類型時,初始化數組中的元素會帶來挑戰。

考慮以下程式碼片段:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = {value, value, value, value, value};
}</code>

雖然簡單,但手動重複該值會變得乏味,因為N 增加。為了解決這個問題,一種更優雅的方法是利用 C 17 的結構化綁定和可變參數模板。

利用序列產生器和重複函數

這個優雅的關鍵解決方案在於產生一個序列類型的seq使用genseq_t發電機。有了這個序列類型,我們可以定義一個重複函數,它接受一個值和產生的序列作為參數,並傳回一個 std::array 。填入重複值。

範例實作

<code class="cpp">template<typename T, int N>
void f(T value)
{
    // genseq_t<N> represents seq<0,1,...N-1>
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>

模式詳細資料

  • genseq_t; type 表示從0 到N-1 的序列類型。
  • repeat(value, seq) 計算結果為一個std::array每個元素都初始化為值。
此技術允許對 std::array 進行簡潔而優雅的初始化。即使 T 缺少預設建構函數。

以上是如何在 C 中使用非預設可構造型別優雅地初始化 `std::array` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn