我有一个供不同功能使用的结构。我认为可以将结构体与需要访问它的所有功能一起实现,而不是将结构体作为输入传递给不同的函数。但是,我希望提供某些固定的基本功能,以便每当创建该结构时,我都不必一遍又一遍地实现同一组功能。
以另一种方式输入,我真正想要的是结构继承:我有与<?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
的结构,并且固定的函数集是AppContext
和new
:
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()
)?