如何在activx中将通用数据类型定义为Message



有没有办法用#[derive(Message)]#[rtype(result = "...")]编写此代码。

pub struct MyMsg<T> {
data: T
}
impl<T: 'static> Message for MyMsg<T> {
type Result = Result<MyMsg<T>, Error>;
}

我试过了,但编译器抱怨所需的生存期界限。

#[derive(Message)]
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T> {
pub data: T,
}

我假设您使用anyhow,因为否则Result<..., Error>就没有多大意义。(因为Error是一种特征,而不是一种类型(

然后,我不理解你的问题,它只是起作用:

use actix_derive::Message;
use anyhow::Error;
#[derive(Message)]
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T: 'static> {
pub data: T,
}

如果你用cargo expand扩展它,你可以看到你得到:

#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
use actix_derive::Message;
use anyhow::Error;
#[rtype(result = "Result<MyMsg<T>, Error>")]
pub struct MyMsg<T: 'static> {
pub data: T,
}
impl<T: 'static> ::actix::Message for MyMsg<T> {
type Result = Result<MyMsg<T>, Error>;
}

最新更新