Namsoo CHO
Intro to Rust
Published in
2 min readApr 24, 2020

--

C++ 사용자는 다음과 같은 코드를 작성할 수 있다.

template<class T, int length>
struct my_vec {
std::array<T, length> inner_data;
...
};

int main() {
my_vec<float, 42> some_vec;
}

여기서 inner_data 배열의 크기는 제너릭 파라메터 length로 정해진다.

러스트에서도 이 것과 비슷한 코드를 작성할 수 있다. 러스트의 이 기능은 아직 해결되어야 할 이슈가 남아 있어서 완전하게 동작하지는 않지만 nightly 컴파일러에서 이 기능을 일부 구현하고 있다.

러스트로 위 C++ 코드와 비슷한 코드는 다음과 같이 작성할 수 있다.

#![feature(const_generics)]
struct MyVec<T: Sized, const LENGTH: usize> {
inner_data: [T; LENGTH],
}

impl<T, const L: usize> MyVec<T, L> {
pub fn new(value: T) -> Self {
MyVec {
inner_data: [value; L],
}
}
}

fn main() {
let _my_vec = MyVec::<f64, 10>::new(4.2);
}

하지만 러스트 컴파일러는 다음과 같은 에러 메시지를 출력할 것이다.

error: array lengths can't depend on generic parameters
--> src/main.rs:11:33
|
11 | inner_data: [value; L],
|

이 글이 씌여지는 시점에서 러스트 컴파일러는 위 코드를 컴파일 하지 못하고 있다. 몇몇 이슈가 여전히 논의 중이고, 어서 이 기능이 안정화 되기를 바라는 마음이다.

이 이슈와 관련된 트랙킹은 여기를 보면 된다.

--

--