特征对象的静态数组

问题描述 投票:0回答:1

是否可以定义特征对象的静态数组:

#[macro_use]
extern crate lazy_static;

trait Tr {}

struct A {}
impl Tr for A {}

struct B {}
impl Tr for B {}

lazy_static! {
    static ref ARR: [Box<dyn Tr>;2] = [Box::new(A {}), Box::new(B {})];
    // error[E0277]: `(dyn Tr + 'static)` cannot be shared between threads safely
}

而不是每个_arr实例具有一个Test

struct Test {
    arr: [Box<dyn Tr>; 2],
}

impl Default for Test {
    fn default() -> Test {
        Test {
            arr: [Box::new(A {}), Box::new(B {})],
        }
    }
}
rust static traits
1个回答
1
投票

您要Box<dyn Tr + Sync>

#[macro_use]
extern crate lazy_static;

trait Tr {}

struct A {}
impl Tr for A {}

struct B {}
impl Tr for B {}

lazy_static! {
    static ref ARR: [Box<dyn Tr + Sync>; 2] = [Box::new(A {}), Box::new(B {})];
}

摘自Sync的文档:

可以在线程之间共享引用的类型。

© www.soinside.com 2019 - 2024. All rights reserved.