当尝试使用JNI接口时,我想知道是否可以将a JObject转换为等效的结构以操作字段。但是,当我尝试时,我惊讶地发现这没有用。忽略这个想法可能多么可怕,为什么它不起作用?
我做了一个简单的课Point来做我的测试。Point有两个字段和一个接受x和y的构造函数,以及一些根据这些字段返回信息的随机方法。
public class Point {
public final double x;
public final double y;
// As well as some random methods
}
Run Code Online (Sandbox Code Playgroud)
使用jol,我Point在java运行时中找到了我的类的结构(如下所示)。
C:\Users\home\IdeaProjects\test-project>java -cp jol-cli-0.9-full.jar;out\production\java-test org.openjdk.jol.Main internals Point
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, …Run Code Online (Sandbox Code Playgroud) 我想使用板条箱cpp创建一个宏,但是该板条箱存在宏扩展问题。
该包的工作原理是获取cpp!{ ... }内联 C 代码的宏,将其内容编译为函数,并用结果函数替换宏调用。这是通过cpp_build::build("src/lib.rs")调用build.rs.
正如板条箱作者所述,cpp!宏是在宏扩展发生之前编译的。这意味着它将尝试按原样解释宏的参数并在宏声明内部进行扩展。
build.rs有没有办法在调用函数之前触发特定宏或文件内部的扩展cpp_build?
假设两个变量a和b存储两个字符串,我想比较这两个字符串是否相同。在Python中,典型的方式应该是a == b. 我相信时间复杂度是 O(min(m,n)),其中 m 和 n 是字符串的长度。但是如果我以这种方式比较它们 a in {b} (我将字符串 b 添加到集合中并检查字符串 a 是否在该集合中),时间复杂度是否为 O(1),无论 a 和 中的字符串长度如何乙?
如何pinned_array_of_default在稳定的 Rust 中实现一个[T; N]太大而无法放入堆栈的通用函数?
fn pinned_array_of_default<T: Default, const N: usize>() -> Pin<Box<[T; N]>> {
unimplemented!()
}
Run Code Online (Sandbox Code Playgroud)
或者,如果这样可以使过程更容易,则T可以实施。Copy
fn pinned_array_of_element<T: Copy, const N: usize>(x: T) -> Pin<Box<[T; N]>> {
unimplemented!()
}
Run Code Online (Sandbox Code Playgroud)
将解决方案保存在安全的 Rust 中会更好,但似乎不太可能。
最初,我希望通过实现,Default我也许能够Default处理初始分配,但是它仍然在堆栈上创建它,因此这对于较大的 值不起作用N。
let boxed: Box<[T; N]> = Box::default();
let foo = Pin::new(boxed);
Run Code Online (Sandbox Code Playgroud)
我怀疑我需要使用它MaybeUninit来实现这一点,并且有一个Box::new_uninit()函数,但它目前不稳定,我理想地希望将其保留在稳定的 Rust 中。我也有点不确定转变为Pin<Box<MaybeUninit<B>>>是否Pin<Box<B>>会对Pin.
使用 a 的目的Pin<Box<[T; N]>>是保存一个指针块,其中 …