MST

星途 面试题库

面试题:Rust特征启用禁用在泛型代码中的复杂应用

在一个泛型结构体和相关方法中,如何根据不同的特征启用或禁用特定的行为?假设你有一个泛型数据存储结构,当启用`Serialize`特征时,需要为其实现序列化功能,否则跳过,写出具体实现代码。
46.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 引入序列化相关的库
use serde::{Serialize, Deserialize};

// 定义泛型结构体
struct DataStore<T> {
    data: T,
}

// 为DataStore实现默认行为
impl<T> DataStore<T> {
    fn new(data: T) -> Self {
        DataStore { data }
    }
}

// 当T实现Serialize特征时,为DataStore<T>实现序列化功能
impl<T: Serialize> DataStore<T> {
    fn serialize(&self) -> Result<String, serde_json::Error> {
        serde_json::to_string(&self.data)
    }
}

以上代码是用Rust语言实现的,定义了一个泛型结构体DataStore。当泛型参数T实现了Serialize特征时,DataStore<T>会有一个serialize方法用于序列化数据。如果T没有实现Serialize特征,就不会有这个序列化相关的方法,即跳过了序列化功能。实际使用时,若要使用Serialize相关功能,需确保引入了serde及其相关依赖。