当库使用模板(泛型)时,是否可以使用Rust的C++库?

Geo*_*ler 4 c++ templates ffi rust

当库(例如Boost)使用模板(泛型)时,是否可以使用Rust的C++库?

Mat*_* M. 7

是的,但可能不实用.


D编程语言是提供某种程度的C++互操作性的少数几种语言之一; 你可以在dlang上阅读更多关于它的内容.

请注意模板部分的限制:

请注意,必须通过链接到包含实例化的C++对象代码或共享库来提供D代码中使用的所有实例化.

这实际上意味着您必须使用C++代码来使用正确的类型实例化模板,然后D编译器将链接这些实例.


您也可以为Rust做同样的事情.没有编译器支持,这意味着手动修改名称.在FFI部分中,您将找到link属性:

#[link(name = "snappy")]
extern {
    fn snappy_max_compressed_length(source_length: size_t) -> size_t;
}
Run Code Online (Sandbox Code Playgroud)

它告诉编译器哪个链接库将提供符号,您还将支持各种调用约定no_mangle属性.

您可能需要#[allow(non_snake_case)]酌情申请.


Servo使用bindgen为C和C++代码生成Rust绑定; 我不清楚C++支持的级别,并且有点怀疑它是否可以处理模板.