簡體   English   中英

如何在特征本身上寫一個特征綁定來引用關聯類型?

[英]How to write a trait bound for a reference to an associated type on the trait itself?

我有以下代碼:

extern crate serde;

use serde::de::DeserializeOwned;
use serde::Serialize;

trait Bar<'a, T: 'a>
where
    T: Serialize,
    &'a T: DeserializeOwned,
{
}

我想使用關聯類型來編寫此代碼,因為類型T對於該類型的用戶並不重要。 我到這為止了:

trait Bar {
    type T: Serialize;
}

我不知道如何指定另一個界限。

最終,我想使用如下函數:

extern crate serde_json;

fn test<I: Bar>(t: I::T) -> String {
    serde_json::to_string(&t).unwrap()
}

“正確”的解決方案是將邊界放在特征上,但要引用關聯的類型。 在這種情況下,您還可以使用排名較高的特征范圍來處理引用:

trait Bar
where
    Self::T: Serialize,
//  ^^^^^^^ Bounds on an associated type  
    for<'a> &'a Self::T: DeserializeOwned,
//  ^^^^^^^^^^^ Higher-ranked trait bounds       
{
    type T;
}

但是,這還行不通。

我相信您將需要:

同時,解決方法是在需要的地方復制綁定:

fn test<I: Bar>(t: I::T) -> String
where
    for<'a> &'a I::T: DeserializeOwned,
{
    serde_json::to_string(&t).unwrap()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM