std::array
在這種情況下,當包含的型別(T) 缺少預設建構函式時,初始化std::array 可能是一個挑戰。常見的解決方案是手動重複值來填充數組,對於較大的 n 值來說,這是一個乏味且容易出錯的過程。
幸運的是,有一種更優雅的方法,使用序列類型和自訂重複函數的組合。考慮以下程式碼:
<code class="cpp">template<typename T, int N> void f(T value) { // Generate a sequence of numbers: 0, 1, ..., N-1 using genseq_t = genseq_t<N>; std::array<T, N> items = repeat(value, genseq_t{}); }</code>
genseq_t
repeat 函數的實作包括解包序列並重複該值對於每個元素,使用簡潔的語法:
<code class="cpp">template<typename T, int...N> auto repeat(T value, seq<N...>) -> std::array<T, sizeof...(N)> { // Unpack N, repeating 'value' sizeof...(N) times return {(N, value)...}; }</code>
使用push_back操作遞歸地定義genseq_t類型以建立序列:
<code class="cpp">template<int N> struct genseq : genseq<N - 1>::type::template push_back<N - 1> {};</code>
自訂序列和重複函數提供了靈活的以及初始化std::array
以上是如何優雅地初始化非預設可構造類型的 std::array ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!