定数ジェネリックを使用して文字列の固定サイズ配列を作成するにはどうすればよいですか?

チェス

定数ジェネリックを使用する関数があります:

fn foo<const S: usize>() -> Vec<[String; S]> {
    // Some code
    let mut row: [String; S] = Default::default(); //It sucks because of default arrays are specified up to 32 only
    // Some code
}

String私の場合sの固定サイズの配列を作成するにはどうすればよいですか?トレイトを実装していないlet mut row: [String; S] = ["".to_string(), S];ため、String機能しませんCopy

1と

あなたがそれを行うことができますMaybeUninitし、unsafe

use std::mem::MaybeUninit;

fn foo<const S: usize>() -> Vec<[String; S]> {
    // Some code

    let mut row: [String; S] = unsafe {
        let mut result = MaybeUninit::uninit();
        let start = result.as_mut_ptr() as *mut String;
        
        for pos in 0 .. S {
            // SAFETY: safe because loop ensures `start.add(pos)`
            //         is always on an array element, of type String
            start.add(pos).write(String::new());
        }

        // SAFETY: safe because loop ensures entire array
        //         has been manually initialised
        result.assume_init()
    };

    // Some code

    todo!()
}

もちろん、そのようなロジックを自分の特性に抽象化する方が簡単かもしれません。

use std::mem::MaybeUninit;

trait DefaultArray {
    fn default_array() -> Self;
}

impl<T: Default, const S: usize> DefaultArray for [T; S] {
    fn default_array() -> Self {
        let mut result = MaybeUninit::uninit();
        let start = result.as_mut_ptr() as *mut T;
        
        unsafe {
            for pos in 0 .. S {
                // SAFETY: safe because loop ensures `start.add(pos)`
                //         is always on an array element, of type T
                start.add(pos).write(T::default());
            }

            // SAFETY: safe because loop ensures entire array
            //         has been manually initialised
            result.assume_init()
        }
    }
}

(ではなく、独自の特性を使用する唯一の理由Defaultは、後者の実装が最大32要素の配列の標準ライブラリで提供されるものと競合することです。標準ライブラリがその実装をDefaultに類似したものに置き換えることを完全に期待しています。constジェネリックが安定したら上記)。

その場合、次のようになります。

fn foo<const S: usize>() -> Vec<[String; S]> {
    // Some code

    let mut row: [String; S] = DefaultArray::default_array();

    // Some code

    todo!()
}

遊び場でそれを見てください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaでジェネリック型の固定サイズの配列を作成するにはどうすればよいですか?

分類Dev

Adaで固定サイズの配列を動的に作成するにはどうすればよいですか?

分類Dev

C ++で文字列内の文字のサイズを使用して文字列をChar配列に変換するにはどうすればよいですか?

分類Dev

結果の型の文字列値としてジェネリックのクラス名を使用するにはどうすればよいですか

分類Dev

valaで固定サイズのC配列型を使用するにはどうすればよいですか?

分類Dev

.mapを使用してオブジェクトの配列から配列の配列を作成するにはどうすればよいですか?

分類Dev

Javaでジェネリック配列の値を取得するにはどうすればよいですか?

分類Dev

innerHTMLを使用してサイズXの配列を更新するにはどうすればよいですか?

分類Dev

Pythonを使用してJSONオブジェクトのネストされた配列を作成するにはどうすればよいですか?

分類Dev

固定セットから固定サイズのすべての異なる2D配列を生成するにはどうすればよいですか?

分類Dev

Androidで固定サイズの文字列の文字に下線を付けてEdittextを作成するにはどうすればよいですか?

分類Dev

ジェネリック関連タイププロトコルの配列を迅速に作成するにはどうすればよいですか?

分類Dev

mongodbのObjectIdを使用して、オブジェクトの配列内の文字列の配列を更新するにはどうすればよいですか?

分類Dev

ジェネレーター関数を使用してサイクルスルー配列を実装するにはどうすればよいですか

分類Dev

配列に要素を挿入するためのジェネリックメソッドを作成するにはどうすればよいですか?

分類Dev

特定のサイズの配列を使用してグリッドを実装するにはどうすればよいですか?

分類Dev

C ++-定数サイズの等差型配列からクラスコンストラクターを作成するにはどうすればよいですか?

分類Dev

文字列を使用してさまざまなサイズの配列の構造体を設計するにはどうすればよいですか?

分類Dev

リストを渡して文字列の配列を作成するにはどうすればよいですか?

分類Dev

固定サイズのcharの配列の型エイリアスを作成するにはどうすればよいですか?

分類Dev

クラスのジェネリック型パラメーターとして非配列と配列の両方を許可しながら、文字列配列をジェネリック配列型に変換するにはどうすればよいですか?

分類Dev

配列の各要素のマッチングを使用してオブジェクトを作成するにはどうすればよいですか?

分類Dev

make_sharedを使用して同じタイプのオブジェクトの配列を作成するにはどうすればよいですか?

分類Dev

Pythonで固定サイズのフォーマットされた文字列を作成するにはどうすればよいですか?

分類Dev

配列オブジェクトの文字の一部を使用して配列を検索するにはどうすればよいですか?

分類Dev

固定文字列で初期化される固定サイズのファイルを作成するにはどうすればよいですか?

分類Dev

ジェネリック型を含む配列を宣言するにはどうすればよいですか?

分類Dev

ジェネリックを使用して汎用チャンクアルゴリズムを作成するにはどうすればよいですか?

分類Dev

pysparkで「別の列のサイズ」の値を繰り返して配列列を作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    Javaでジェネリック型の固定サイズの配列を作成するにはどうすればよいですか?

  2. 2

    Adaで固定サイズの配列を動的に作成するにはどうすればよいですか?

  3. 3

    C ++で文字列内の文字のサイズを使用して文字列をChar配列に変換するにはどうすればよいですか?

  4. 4

    結果の型の文字列値としてジェネリックのクラス名を使用するにはどうすればよいですか

  5. 5

    valaで固定サイズのC配列型を使用するにはどうすればよいですか?

  6. 6

    .mapを使用してオブジェクトの配列から配列の配列を作成するにはどうすればよいですか?

  7. 7

    Javaでジェネリック配列の値を取得するにはどうすればよいですか?

  8. 8

    innerHTMLを使用してサイズXの配列を更新するにはどうすればよいですか?

  9. 9

    Pythonを使用してJSONオブジェクトのネストされた配列を作成するにはどうすればよいですか?

  10. 10

    固定セットから固定サイズのすべての異なる2D配列を生成するにはどうすればよいですか?

  11. 11

    Androidで固定サイズの文字列の文字に下線を付けてEdittextを作成するにはどうすればよいですか?

  12. 12

    ジェネリック関連タイププロトコルの配列を迅速に作成するにはどうすればよいですか?

  13. 13

    mongodbのObjectIdを使用して、オブジェクトの配列内の文字列の配列を更新するにはどうすればよいですか?

  14. 14

    ジェネレーター関数を使用してサイクルスルー配列を実装するにはどうすればよいですか

  15. 15

    配列に要素を挿入するためのジェネリックメソッドを作成するにはどうすればよいですか?

  16. 16

    特定のサイズの配列を使用してグリッドを実装するにはどうすればよいですか?

  17. 17

    C ++-定数サイズの等差型配列からクラスコンストラクターを作成するにはどうすればよいですか?

  18. 18

    文字列を使用してさまざまなサイズの配列の構造体を設計するにはどうすればよいですか?

  19. 19

    リストを渡して文字列の配列を作成するにはどうすればよいですか?

  20. 20

    固定サイズのcharの配列の型エイリアスを作成するにはどうすればよいですか?

  21. 21

    クラスのジェネリック型パラメーターとして非配列と配列の両方を許可しながら、文字列配列をジェネリック配列型に変換するにはどうすればよいですか?

  22. 22

    配列の各要素のマッチングを使用してオブジェクトを作成するにはどうすればよいですか?

  23. 23

    make_sharedを使用して同じタイプのオブジェクトの配列を作成するにはどうすればよいですか?

  24. 24

    Pythonで固定サイズのフォーマットされた文字列を作成するにはどうすればよいですか?

  25. 25

    配列オブジェクトの文字の一部を使用して配列を検索するにはどうすればよいですか?

  26. 26

    固定文字列で初期化される固定サイズのファイルを作成するにはどうすればよいですか?

  27. 27

    ジェネリック型を含む配列を宣言するにはどうすればよいですか?

  28. 28

    ジェネリックを使用して汎用チャンクアルゴリズムを作成するにはどうすればよいですか?

  29. 29

    pysparkで「別の列のサイズ」の値を繰り返して配列列を作成するにはどうすればよいですか?

ホットタグ

アーカイブ