使用#![no_std]时如何派生复制?

时间:2015-01-16 17:39:39

标签: rust

我正在开发一个使用#![no_std]的项目,我希望能够推导出有用的特性,例如CopyClone。我尝试将pub use core::prelude::*;添加到项目根目录和我实际想要使用它的文件中。但是,#[derive(Copy)]的任何尝试都会导致

  

错误:尝试实现不存在的特征std :: marker :: Copy

我不明白我做错了什么。试图添加

use core::marker::Copy

得出这个:

  

错误:已在此模块中导入名为Copy的类型

2 个答案:

答案 0 :(得分:3)

#[derive]在#中被破坏![no_std] pub mod std {pub use core::*;}将修复它,它将::std::的实例替换为::core::,允许您导出编译器认为属于的特征来自std

core

答案 1 :(得分:3)

您始终可以使用impl实现标记特征:

impl Copy for MyStruct {}

它仅适用于标记特征,Clone和其他类似特征仍然需要deriving