当前位置:  开发笔记 > 后端 > 正文

适用于Rust的C++ Friend-like构造

如何解决《适用于Rust的C++Friend-like构造》经验,为你挑选了1个好方法。

在某些情况下,我想利用Rust中的任何替代方法来解决C++的friend关键字.在箱子A中我有以下模块:

mod a0:

pub struct A {
    pub a0: u8,
    a1: SomeType,
}

impl A {
    pub fn fa0(...) { ... }
    fn fa1(...) { ... }
}

模块b0c0需要访问所有公共和私人成员A.代码不能这样做,除非它在mod a0.我只想暴露A,A::a0A::fa0与其他与此箱子接口的箱子,但在这个箱子里我想要访问A(公共和私人)的完整实现.

我通常最终做的事情如下:

mod a0:

pub struct A {
    pub a0: u8,
    inner: Inner
}

pub struct Inner { /* all pub fields */ }

pub fn get_inner<'a>(obj: &'a mut A) -> &'a Inner {
     &mut obj.inner
}

模块b0c0访问get_inner,因此Inner,在lib.rs我做:

mod a0;
mod b0;
mod c0;

pub use a0::A; // so other crates cannot use get_inner(...) etc.

这似乎很复杂,我似乎错过了一些东西.或者这是唯一的方法吗?



1> Isaac Woods..:

现在RFC 1422已被接受,这是可能的!您可以pub在结构定义中替换为:

pub(crate) 允许在当前箱子内进行访问

pub(super) 允许访问当前模块的父级

pub(in some_module) 允许访问 some_module

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有