내가 스택에 어떤 튜플가 있다고 가정 :녹에서는 어떻게 튜플에 의해 뒷받침되는 슬라이스를 만드나요?
let a:(u8,u8,u8) = (1,2,3);
어떻게 모두에 슬라이스를 만들거나 일부합니까?
내가 스택에 어떤 튜플가 있다고 가정 :녹에서는 어떻게 튜플에 의해 뒷받침되는 슬라이스를 만드나요?
let a:(u8,u8,u8) = (1,2,3);
어떻게 모두에 슬라이스를 만들거나 일부합니까?
녹 참조 당신이 튜플의 첫 번째 요소에 대한 포인터를 가지고 슬라이스로 변환 할 수 있도록, 연속 레이아웃 및 정의 순서를 한 것으로 defines 튜플 :
#![feature(tuple_indexing)]
use std::slice;
fn main() {
let t = (1u8, 2u8, 3u8);
let f: *const u8 = &t.0;
let s = unsafe { slice::from_raw_buf(&f, 3) };
println!("{}", s); // [1, 2, 3]
}
이 또한 this RFC이지만, 꽤 오래 전에 폐쇄되었습니다.
감사! 나는 안전하지 않을 것이라고 생각했다 ... 사람들이 이것을 전혀하지 못하게하는 데 도움을줌으로써, 이것은 기본적인 안전하지 않은 포인터를 던지는 법을 수행하는 좋은 예이다. –
대부분의 경우이 작업을 수행하는 것은 의미가 없습니다. 같은 크기의 튜플과 고정 크기 배열의 주된 차이점은 튜플이 이기종 요소를 지원하는 반면 배열은 같은 유형의 요소를 포함한다는 것입니다. 슬라이스는 메모리에서 연속하는 ~ 같은 유형의 값 배열에 대한 뚱뚱한 포인터입니다. 따라서 일부 튜플에 대해 의미가있을 수 있지만 일반적으로 그렇지 않으므로 슬라이스 작업이 튜플에서 지원되지 않습니다.
아래 부분적으로 내 자신의 질문에 답했습니다. 그러나 누군가 동질적인 유형의 튜플에 대한 답을 실제로 알고 있다면 그 대답을 수락 할 것입니다. –