Rust中的类型操作

t3irkdon  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(110)

在C++中,我们可以从另一个类派生一个类,如下所示:

template<int N> 
struct MyType {
   int arr[N];
};

template<typename T, int E>
struct ModType;

template<int N, int E>
struct ModType<MyType<N>, E> {
   typedef MyType<N+E> extend_type;
};

因此,使用ModType〈〉,我们可以从一个数据类型派生出另一个数据类型,在Rust中,我们似乎不能在struct中使用type,我们如何在Rust中实现类似的功能呢?

uklbhaso

uklbhaso1#

这在stable rust中是不可能的,因为const泛型上的算法还不稳定,nightly feature的标志是generic_const_exprs
这是它在夜间Rust上的样子。注意,语法和语义可能会在特性稳定时发生变化。

#![allow(unused)]
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]

struct MyType<const N: usize> {
    arr: [i32; N],
}

struct ModType<T, const E: usize>(std::marker::PhantomData<T>);

trait ModTypeTrait {
    type ExtendType;
}

impl<const N: usize, const E: usize> ModTypeTrait for ModType<MyType<N>, E>
where [(); {N + E}]:
{
    type ExtendType = MyType<{N + E}>;
}

这是将给定的C++代码直接重新实现到Rust中。根据您试图用此代码解决的问题,可能有一种更Rusty的方法来处理它。

相关问题