有什么方法可以将自定义函数添加到预定义的结构中?

时间:2018-10-04 18:39:49

标签: rust

我有一个供不同功能使用的结构。我认为可以将结构体与需要访问它的所有功能一起实现,而不是将结构体作为输入传递给不同的函数。但是,我希望提供某些固定的基本功能,以便每当创建该结构时,我都不必一遍又一遍地实现同一组功能。

以另一种方式输入,我真正想要的是结构继承:我有与<?php error_reporting(0); $file_lines = file('urls.txt', FILE_IGNORE_NEW_LINES); foreach ($file_lines as $line) { $s = get_headers($line, 1); $g = $s[0]; echo $line . " - " . $g . "\n"; } ?> 相关联的某些方法,用户可以将其自定义函数添加到struct并允许他们访问数据包含在数据中。反正有能力这样做吗?

具体来说,假设我有一个名为struct的结构,并且固定的函数集是AppContextnew

bdev_name

现在,当我使用此结构时,我会这样做:

pub struct AppContext {
    bdev: *mut raw::spdk_bdev,
    bdev_desc: *mut raw::spdk_bdev_desc,
    bdev_io_channel: *mut raw::spdk_io_channel,
    buff: *mut c_char,
    bdev_name: *const c_char,
}

impl AppContext {
    pub fn new() -> Self {
        let context: AppContext;
        unsafe {
            context = mem::uninitialized();
        }
        context
    }

    pub fn bdev_name(&mut self, name: &str) {
        self.bdev_name = CString::new(name)
            .expect("Couldn't create a string")
            .into_raw()
    }
}

我想添加一个额外的函数(例如let mut context = AppContext::new(); context.bdev_name("Nvme0n1"); ),该函数可以处理上下文结构中的数据。但是,end()是非常特定于域的功能,并且在特定模块中是必需的,因此,实现为上下文结构的一部分并不是一个好主意。

有什么办法可以解决此问题(即将自定义功能添加到预定义的end())?

0 个答案:

没有答案