18
18
Rustはいくつかのそのような型を扱うことができますが、それらには以下の様な3つの制約が存在します:
19
19
20
20
<!-- 1. We can only manipulate an instance of an unsized type via a pointer. An ->
21
- <!-- `&[T]` works just fine, but a `[T]` does not. -->
21
+ <!-- `&[T]` works fine, but a `[T]` does not. -->
22
22
<!-- 2. Variables and arguments cannot have dynamically sized types. -->
23
23
<!-- 3. Only the last field in a `struct` may have a dynamically sized type; the -->
24
24
<!-- other fields must not. Enum variants must not have dynamically sized types as -->
25
25
<!-- data. -->
26
- 1 . サイズ不定型はポインタを通してのみ操作することができます、たとえば、 ` &[T] ` は大丈夫ですが、 ` [T] ` はそうではありません。
26
+ 1 . サイズ不定型はポインタを通してのみ操作することができます。
27
+ たとえば、 ` &[T] ` は大丈夫ですが、 ` [T] ` はそうではありません。
27
28
2 . 変数や引数は動的なサイズを持つことはできません。
28
- 3 . ` struct ` の最後のフィールドのみ、動的なサイズを持つことが許されます、その他のフィールドはサイズが不定であってはなりません。
29
+ 3 . ` struct ` の最後のフィールドのみ、動的なサイズを持つことが許されます。
30
+ その他のフィールドはサイズが不定であってはなりません。
29
31
また、Enumのバリアントはデータとして動的なサイズの型を持つ事はできません。
30
32
31
33
<!-- So why bother? Well, because `[T]` can only be used behind a pointer, if we -->
32
34
<!-- didn’t have language support for unsized types, it would be impossible to write -->
33
35
<!-- this: -->
34
- なぜこんなにややこしいのでしょうか? これは、 ` [T] ` はポインタを通してのみ操作可能であるため、
35
- もし言語がサイズ不定型をサポートしていなかった場合、以下のようなコードを書くことは不可能となります:
36
+ なぜこんなにややこしいのでしょうか?
37
+ これは、 ` [T] ` はポインタを通してのみ操作可能であるため、 もし言語がサイズ不定型をサポートしていなかった場合、以下のようなコードを書くことは不可能となります:
36
38
37
39
``` rust,ignore
38
40
impl Foo for str {
@@ -57,7 +59,7 @@ impl Foo for &str {
57
59
<!-- some point, there are some bugs to fix first) user-defined custom smart -->
58
60
<!-- pointers, can use this `impl`. -->
59
61
このように書いたとすると、このコードは [ 参照] [ ref ] に対してのみ動作する用になり、他のポインタ型に対しては動作しないことになります。
60
- ` imp for str ` のように書くことで、すべてのポインタ、ユーザーの定義した独自のスマートポインタ(いくつかの点についてバグがあるので、それを先ずは直さなくてはなりませんが )もこの ` impl ` を利用可能になります。
62
+ ` imp for str ` のように書くことで、すべてのポインタ、ユーザーの定義した独自のスマートポインタ(いくつかの点についてバグがあるので、それをまずは直さなくてはなりませんが )もこの ` impl ` を利用可能になります。
61
63
62
64
[ ref ] : references-and-borrowing.html
63
65
@@ -76,5 +78,6 @@ struct Foo<T: ?Sized> {
76
78
<!-- This `?`, read as “T may be `Sized`”, means that this bound is special: it -->
77
79
<!-- lets us match more kinds, not less. It’s almost like every `T` implicitly has -->
78
80
<!-- `T: Sized`, and the `?` undoes this default. -->
79
- ` ? ` は 「Tは ` Sized ` かもしれない」と読みます、これは ` ? ` が特別な境界: より小さいカインドとマッチするのではなく、より大きいカインドとマッチする ということを意味しています。
81
+ ` ? ` は 「Tは ` Sized ` かもしれない」と読みます。
82
+ これは ` ? ` が特別な境界: より小さいカインドとマッチするのではなく、より大きいカインドとマッチする ということを意味しています。
80
83
これは、すべての ` T ` は暗黙的に ` T : Sized ` という制限がかけられていて、 ` ? ` はその制限を解除するというようなものです。
0 commit comments