Dave Herman最近在Rust 的演讲中说他们从C++借用了这个属性.我无法找到有关该主题的任何内容.有人可以解释一下单态意味着什么吗?
如何获得Box<B>或&B或&Box<B>从a在此代码变量:
trait A {}
struct B;
impl A for B {}
fn main() {
let mut a: Box<dyn A> = Box::new(B);
let b = a as Box<B>;
}
Run Code Online (Sandbox Code Playgroud)
此代码返回错误:
error[E0605]: non-primitive cast: `std::boxed::Box<dyn A>` as `std::boxed::Box<B>`
--> src/main.rs:8:13
|
8 | let b = a as Box<B>;
| ^^^^^^^^^^^
|
= note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait
Run Code Online (Sandbox Code Playgroud) 在具有复杂数据类型(如Arc指针Mutex锁)的结构上实现序列化/反序列化和大小调整功能时遇到问题。首先,我使用本主题解决了这些Arc和Mutex序列化/反序列化问题:
但是现在,我被困在实现ser/desr和调整Any和Send特征的大小上,我既没有想法也没有编译示例来解决这个问题。
代码在这里:
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
use serde::Serialize;
use std::sync::Mutex;
use std::sync::Arc;
use std::any::Any;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub id: u64,
pub data: Arc<Mutex<Any + Send>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Data {
pub name: String,
}
impl Data {
fn new(name_parameter: String) -> Data {
let …Run Code Online (Sandbox Code Playgroud) 我有一段serde代码可以实现我想要的功能,但我不喜欢它的实现方式。我正在寻求帮助以了解如何改进它。
use std::any::Any;\n\ntrait Model: std::fmt::Debug + Any {\n fn as_any(&self) -> &dyn Any;\n}\n\nimpl Model for Generator {\n fn as_any(&self) -> &dyn Any {\n self\n }\n}\nimpl Model for Connector {\n fn as_any(&self) -> &dyn Any {\n self\n }\n}\n\n#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct Generator {\n id: String,\n #[serde(rename = "sourceID")]\n source_id: String,\n}\n\n#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct Connector {\n id: String,\n #[serde(rename = "sourceID")]\n source_id: String,\n}\n\n#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\n#[serde(tag = "type")]\nenum AllModels {\n Generator(Generator),\n Connector(Connector),\n}\n\nfn main() {\n let …Run Code Online (Sandbox Code Playgroud)